po.vim 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. " Vim syntax file
  2. " Language: po (gettext)
  3. " Maintainer: Dwayne Bailey <dwayne@translate.org.za>
  4. " Last Change: 2015 Jun 07
  5. " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
  6. " Leonardo Fontenelle (Spell checking)
  7. " Nam SungHyun <namsh@kldp.org> (Original maintainer)
  8. " quit when a syntax file was already loaded
  9. if exists("b:current_syntax")
  10. finish
  11. endif
  12. let s:keepcpo= &cpo
  13. set cpo&vim
  14. syn sync minlines=10
  15. " Identifiers
  16. syn match poStatementMsgCTxt "^msgctxt"
  17. syn match poStatementMsgidplural "^msgid_plural" contained
  18. syn match poPluralCaseN "[0-9]" contained
  19. syn match poStatementMsgstr "^msgstr\(\[[0-9]\]\)" contains=poPluralCaseN
  20. " Simple HTML and XML highlighting
  21. syn match poHtml "<\_[^<>]\+>" contains=poHtmlTranslatables,poLineBreak
  22. syn match poHtmlNot +"<[^<]\+>"+ms=s+1,me=e-1
  23. syn region poHtmlTranslatables start=+\(abbr\|alt\|content\|summary\|standby\|title\)=\\"+ms=e-1 end=+\\"+ contained contains=@Spell
  24. syn match poLineBreak +"\n"+ contained
  25. " Translation blocks
  26. syn region poMsgCTxt matchgroup=poStatementMsgCTxt start=+^msgctxt "+rs=e-1 matchgroup=poStringCTxt end=+^msgid "+me=s-1 contains=poStringCTxt
  27. syn region poMsgID matchgroup=poStatementMsgid start=+^msgid "+rs=e-1 matchgroup=poStringID end=+^msgstr\(\|\[[\]0\[]\]\) "+me=s-1 contains=poStringID,poStatementMsgidplural,poStatementMsgid
  28. syn region poMsgSTR matchgroup=poStatementMsgstr start=+^msgstr\(\|\[[\]0\[]\]\) "+rs=e-1 matchgroup=poStringSTR end=+\n\n+me=s-1 contains=poStringSTR,poStatementMsgstr
  29. syn region poStringCTxt start=+"+ skip=+\\\\\|\\"+ end=+"+
  30. syn region poStringID start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
  31. \ contains=poSpecial,poFormat,poCommentKDE,poPluralKDE,poKDEdesktopFile,poHtml,poAcceleratorId,poHtmlNot,poVariable
  32. syn region poStringSTR start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
  33. \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
  34. " Header and Copyright
  35. syn 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
  36. syn match poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
  37. 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
  38. " Translation comment block including: translator comment, automatic coments, flags and locations
  39. syn match poComment "^#.*$"
  40. syn keyword poFlagFuzzy fuzzy contained
  41. syn match poCommentTranslator "^# .*$" contains=poCopyrightUnset
  42. syn match poCommentAutomatic "^#\..*$"
  43. syn match poCommentSources "^#:.*$"
  44. syn match poCommentFlags "^#,.*$" contains=poFlagFuzzy
  45. syn match poDiffOld '\(^#| "[^{]*+}\|{+[^}]*+}\|{+[^}]*\|"$\)' contained
  46. syn match poDiffNew '\(^#| "[^{]*-}\|{-[^}]*-}\|{-[^}]*\|"$\)' contained
  47. syn match poCommentDiff "^#|.*$" contains=poDiffOld,poDiffNew
  48. " Translations (also includes header fields as they appear in a translation msgstr)
  49. syn region poCommentKDE start=+"_: +ms=s+1 end="\\n" end="\"\n^msgstr"me=s-1 contained
  50. syn region poCommentKDEError start=+"\(\|\s\+\)_:+ms=s+1 end="\\n" end=+"\n\n+me=s-1 contained
  51. syn match poPluralKDE +"_n: +ms=s+1 contained
  52. syn region poPluralKDEError start=+"\(\|\s\+\)_n:+ms=s+1 end="\"\n\n"me=s-1 contained
  53. syn match poSpecial contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
  54. syn match poFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
  55. syn match poFormat "%%" contained
  56. " msguniq and msgcat conflicts
  57. syn region poMsguniqError matchgroup=poMsguniqErrorMarkers start="#-#-#-#-#" end='#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)-\("\n"\|\)#\("\n"\|\)\\n' contained
  58. " Obsolete messages
  59. syn match poObsolete "^#\~.*$"
  60. " KDE Name= handling
  61. syn match poKDEdesktopFile "\"\(Name\|Comment\|GenericName\|Description\|Keywords\|About\)="ms=s+1,me=e-1
  62. " Accelerator keys - this messes up if the preceding or following char is a multibyte unicode char
  63. syn match poAcceleratorId contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1
  64. syn match poAcceleratorStr contained "[^&_~][&_~]\(\a\|\d\)[^:]"ms=s+1,me=e-1 contains=@Spell
  65. " Variables simple
  66. syn match poVariable contained "%\d"
  67. " Define the default highlighting.
  68. " Only when an item doesn't have highlighting yet
  69. hi def link poCommentSources PreProc
  70. hi def link poComment Comment
  71. hi def link poCommentAutomatic Comment
  72. hi def link poCommentTranslator Comment
  73. hi def link poCommentFlags Special
  74. hi def link poCommentDiff Comment
  75. hi def link poCopyrightUnset Todo
  76. hi def link poFlagFuzzy Todo
  77. hi def link poDiffOld Todo
  78. hi def link poDiffNew Special
  79. hi def link poObsolete Comment
  80. hi def link poStatementMsgid Statement
  81. hi def link poStatementMsgstr Statement
  82. hi def link poStatementMsgidplural Statement
  83. hi def link poStatementMsgCTxt Statement
  84. hi def link poPluralCaseN Constant
  85. hi def link poStringCTxt Comment
  86. hi def link poStringID String
  87. hi def link poStringSTR String
  88. hi def link poCommentKDE Comment
  89. hi def link poCommentKDEError Error
  90. hi def link poPluralKDE Comment
  91. hi def link poPluralKDEError Error
  92. hi def link poHeaderItem Identifier
  93. hi def link poHeaderUndefined Todo
  94. hi def link poKDEdesktopFile Identifier
  95. hi def link poHtml Identifier
  96. hi def link poHtmlNot String
  97. hi def link poHtmlTranslatables String
  98. hi def link poLineBreak String
  99. hi def link poFormat poSpecial
  100. hi def link poSpecial Special
  101. hi def link poAcceleratorId Special
  102. hi def link poAcceleratorStr Special
  103. hi def link poVariable Special
  104. hi def link poMsguniqError Special
  105. hi def link poMsguniqErrorMarkers Comment
  106. let b:current_syntax = "po"
  107. let &cpo = s:keepcpo
  108. unlet s:keepcpo
  109. " vim:set ts=8 sts=2 sw=2 noet: