<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<language name="GNU Gettext" version="5" kateversion="5.0" section="Markup" extensions="*.po;*.pot" mimetype="text/x-gettext-translation" author="Dominik Haumann (dhaumann@kde.org)" license="MIT">
  <highlighting>

    <contexts>
      <context name = "Normal" attribute = "Normal Text" lineEndContext="#stay">
        <RegExpr attribute = "Keyword" String = "^(msgid_plural|msgid|msgstr|msgctxt)" context="#stay"/>
        <StringDetect attribute = "Automatic Comment" String = "#." context="AutomaticComment" firstNonSpace="true"/>
        <StringDetect attribute = "Reference" String = "#:" context="References" firstNonSpace="true"/>
        <StringDetect attribute = "Flag" String = "#," context="Flags" firstNonSpace="true"/>
        <StringDetect attribute = "StringPrevious" String = "#|" context="Previous" firstNonSpace="true"/>
        <StringDetect attribute = "Translator Comment" String = "#" context="TranslatorComment" firstNonSpace="true"/>
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <DetectChar attribute = "String" char="&quot;" context="String"/>
        <RegExpr attribute = "Index" String="\[\d+\]" context="#stay"/>
      </context>

      <context name = "TranslatorComment" attribute = "Translator Comment" lineEndContext="#pop">
          <StringDetect attribute = "StringDiffNewWrapComment" String="{+" context="StringDiffNewComment"/>
          <StringDetect attribute = "StringDiffOldWrapComment" String="{-" context="StringDiffOldComment"/>
      </context>
      <context name = "AutomaticComment" attribute = "Automatic Comment" lineEndContext="#pop">
        <StringDetect attribute = "StringDiffNewWrapComment" String="{+" context="StringDiffNewComment"/>
        <StringDetect attribute = "StringDiffOldWrapComment" String="{-" context="StringDiffOldComment"/>
      </context>
      <context name = "References" attribute = "Reference" lineEndContext="#pop">
        <StringDetect attribute = "StringDiffNewWrapComment" String="{+" context="StringDiffNewComment"/>
        <StringDetect attribute = "StringDiffOldWrapComment" String="{-" context="StringDiffOldComment"/>
      </context>
      <context name = "Flags" attribute = "Flag" lineEndContext="#pop">
        <!-- Make fuzzy-flag stand out from the rest, being the most important. -->
        <StringDetect attribute = "FlagFuzzy" String="fuzzy" context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrapComment" String="{+" context="StringDiffNewComment"/>
        <StringDetect attribute = "StringDiffOldWrapComment" String="{-" context="StringDiffOldComment"/>
      </context>
      <context name = "StringDiffNewComment" attribute = "StringDiffNewComment" lineEndContext="#pop">
        <StringDetect attribute = "StringDiffNewWrapComment" String="+}" context="#pop"/>
      </context>
      <context name = "StringDiffOldComment" attribute = "StringDiffOldComment" lineEndContext="#pop">
        <StringDetect attribute = "StringDiffOldWrapComment" String="-}" context="#pop"/>
      </context>

      <!--
        Tag-context should be carried over if split by string continuation,
        to not lose markup highlighting when that happens.
      -->
      <context name = "String" attribute = "String" lineEndContext="#stay">
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <RegExpr attribute = "Entity" String="&amp;([a-zA-Z0-9_.-]+|#[0-9]+);" context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrap" String="{+" context="StringDiffNew"/>
        <StringDetect attribute = "StringDiffOldWrap" String="{-" context="StringDiffOld"/>
        <DetectChar attribute = "StringTag" char="&lt;" context="StringTag"/>
        <DetectChar attribute = "String" char="&quot;" context="StringWrap"/>
      </context>
      <context name = "StringTag" attribute = "StringTag" lineEndContext="#stay">
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrap" String="{+" context="StringDiffNew"/>
        <StringDetect attribute = "StringDiffOldWrap" String="{-" context="StringDiffOld"/>
        <DetectChar attribute = "StringTag" char="&gt;" context="#pop"/>
        <DetectChar attribute = "String" char="&quot;" context="StringWrapSub"/>
      </context>
      <context name = "StringWrap" attribute = "String" lineEndContext="#stay">
        <DetectChar attribute = "String" char="&quot;" context="#pop"/>
        <RegExpr String="." lookAhead="true" context="#pop#pop"/>
      </context>
      <context name = "StringDiffNew" attribute = "StringDiffNew" lineEndContext="#stay">
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrap" String="+}" context="#pop"/>
        <DetectChar attribute = "String" char="&quot;" context="StringWrapSub"/>
      </context>
      <context name = "StringDiffOld" attribute = "StringDiffOld" lineEndContext="#stay">
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffOldWrap" String="-}" context="#pop"/>
        <DetectChar attribute = "String" char="&quot;" context="StringWrapSub"/>
      </context>
      <context name = "StringWrapSub" attribute = "String" lineEndContext="#stay">
        <DetectChar attribute = "String" char="&quot;" context="#pop"/>
        <RegExpr String="." lookAhead="true" context="#pop#pop#pop"/>
      </context>

      <!--
        Previous strings are those in #| comments, introduced by Gettext 0.16.
        They should have all the same highlight types as normal strings.
        A special addition are embedded diff-segments: {+...+} and {-...-},
        which are not Gettext standard, but some tools can produce them.
      -->
      <context name = "Previous" attribute = "Normal Text" lineEndContext="#pop">
        <RegExpr attribute = "KeywordPrevious" String = "(msgctxt|msgid_plural|msgid|msgstr)" context="#stay"/>
        <RegExpr attribute = "CharPrevious" String="\\." context="#stay"/>
        <DetectChar attribute = "StringPrevious" char="&quot;" context="StringPrevious"/>
        <RegExpr attribute = "IndexPrevious" String="\[\d+\]" context="#stay"/>
      </context>
      <context name = "StringPrevious" attribute = "StringPrevious" lineEndContext="#stay">
        <RegExpr attribute = "CharPrevious" String="\\." context="#stay"/>
        <RegExpr attribute = "EntityPrevious" String="&amp;([a-zA-Z0-9_.-]+|#[0-9]+);" context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrapPrevious" String="{+" context="StringDiffNewPrevious"/>
        <StringDetect attribute = "StringDiffOldWrapPrevious" String="{-" context="StringDiffOldPrevious"/>
        <DetectChar attribute = "StringTagPrevious" char="&lt;" context="StringTagPrevious"/>
        <DetectChar attribute = "StringPrevious" char="&quot;" context="StringWrapPrevious"/>
      </context>
      <context name = "StringTagPrevious" attribute = "StringTagPrevious" lineEndContext="#stay">
        <RegExpr attribute = "Char" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrapPrevious" String="{+" context="StringDiffNewPrevious"/>
        <StringDetect attribute = "StringDiffOldWrapPrevious" String="{-" context="StringDiffOldPrevious"/>
        <DetectChar attribute = "StringTagPrevious" char="&gt;" context="#pop"/>
        <DetectChar attribute = "StringPrevious" char="&quot;" context="StringWrapSubPrevious"/>
      </context>
      <context name = "StringDiffNewPrevious" attribute = "StringDiffNewPrevious" lineEndContext="#stay">
        <RegExpr attribute = "CharPrevious" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffNewWrapPrevious" String="+}" context="#pop"/>
        <DetectChar attribute = "StringPrevious" char="&quot;" context="StringWrapSubPrevious"/>
      </context>
      <context name = "StringDiffOldPrevious" attribute = "StringDiffOldPrevious" lineEndContext="#stay">
        <RegExpr attribute = "CharPrevious" String="\\." context="#stay"/>
        <StringDetect attribute = "StringDiffOldWrapPrevious" String="-}" context="#pop"/>
        <DetectChar attribute = "StringPrevious" char="&quot;" context="StringWrapSubPrevious"/>
      </context>
      <context name = "StringWrapPrevious" attribute = "StringPrevious" lineEndContext="#stay">
        <RegExpr String="[^#]" firstNonSpace="true" lookAhead="true" context="#pop#pop"/>
        <RegExpr attribute = "StringPrevious" String="(#\|)? *&quot;" context="#pop"/>
        <RegExpr String="." lookAhead="true" context="#pop#pop"/>
      </context>
      <context name = "StringWrapSubPrevious" attribute = "StringPrevious" lineEndContext="#stay">
        <RegExpr String="[^#]" firstNonSpace="true" lookAhead="true" context="#pop#pop#pop"/>
        <RegExpr attribute = "StringPrevious" String="(#\|)? *&quot;" context="#pop"/>
        <RegExpr String="." lookAhead="true" context="#pop#pop#pop"/>
      </context>
    </contexts>

    <itemDatas>
<!--		 Adapted to work with Syntax::Kamelon-->
      <itemData name = "Normal Text" defStyleNum ="dsNormal"/>
      <itemData name = "Keyword" defStyleNum ="dsKeyword"/>
		<itemData name = "KeywordPrevious" defStyleNum ="dsOperator" italic="true" color="#006060"/>
      <itemData name = "String" defStyleNum ="dsString"/>
		<itemData name = "StringPrevious" defStyleNum ="dsSpecialChar" italic="true" color="#008080"/>
      <itemData name = "Translator Comment" defStyleNum ="dsComment" color="#888888"/>
		<itemData name = "Automatic Comment" defStyleNum ="dsCommentVar" color="#0000ff"/>
		<itemData name = "Reference" defStyleNum ="dsBaseN" color="#0000ff"/>
		<itemData name = "Flag" defStyleNum ="dsBuiltIn" color="#0000ff"/>
		<itemData name = "FlagFuzzy" defStyleNum ="dsConstant" color="#800080" bold="true"/>
      <itemData name = "Char" defStyleNum ="dsChar" color="#ff00ff"/>
		<itemData name = "CharPrevious" defStyleNum ="dsVariable" italic="true" color="#00c040"/>
		<itemData name = "Entity" defStyleNum ="dsSpecialString" color="#ff0040" bold="true"/>
		<itemData name = "EntityPrevious" defStyleNum ="dsVerbatimString" color="#40c080" bold="true" italic="true"/>
		<itemData name = "StringTag" defStyleNum ="dsBuiltIn" color="#c00000" bold="true"/>
		<itemData name = "StringTagPrevious" defStyleNum ="dsFloat" color="#006060" bold="true" italic="true"/>
      <itemData name = "Index" defStyleNum ="dsDecVal" color="#0000ff"/>
		<itemData name = "IndexPrevious" defStyleNum ="dsDataType" italic="true" color="#000000"/>
		<itemData name = "StringDiffNewWrap" defStyleNum ="dsOperator" color="#0080f8"/>
		<itemData name = "StringDiffOldWrap" defStyleNum ="dsAttribute" color="#f00080"/>
		<itemData name = "StringDiffNew" defStyleNum ="dsPreprocessor" underline="true" color="#0080f8"/>
		<itemData name = "StringDiffOld" defStyleNum ="dsRegionMarker" underline="true" color="#f00080"/>
		<itemData name = "StringDiffNewWrapComment" defStyleNum ="dsDocumentation" italic="true" color="#0080f8"/>
		<itemData name = "StringDiffOldWrapComment" defStyleNum ="dsInformation" italic="true" color="#f00080"/>
		<itemData name = "StringDiffNewComment" defStyleNum ="dsControlFlow" italic="true" color="#0080f8"/>
		<itemData name = "StringDiffOldComment" defStyleNum ="dsCommentVar" italic="true" color="#f00080"/>
		<itemData name = "StringDiffNewWrapPrevious" defStyleNum ="dsAnnotation" italic="true" color="#0080f8"/>
		<itemData name = "StringDiffOldWrapPrevious" defStyleNum ="dsDocumentation" italic="true" color="#f00080"/>
		<itemData name = "StringDiffNewPrevious" defStyleNum ="dsFunction" italic="true" color="#0080f8"/>
		<itemData name = "StringDiffOldPrevious" defStyleNum ="dsOthers" italic="true" color="#f00080"/>
    </itemDatas>
  </highlighting>
  <general>
    <comments>
      <comment name="singleLine" start="#" />
    </comments>
    <keywords casesensitive="1" />
  </general>
</language>