<?xml version="1.0" encoding="UTF-8"?>
<!--
	Kate syntax highlight filter for Markdown/MultiMarkdown documents.

	Copyright 2008 Darrin Yeager. http://www.dyeager.org/
	Dual-Licensed under both GPL and BSD licenses.

	Extended 2009 Claes Holmerson. http://github.com/claes/kate-markdown/
-->


<!-- the [^\s]{1} is in the regex to avoid interfering with bullet list which
	  starts "* item". Thus emphasis/strong MUST be formed like *words here*
	  with the asterisks next to the beginning of the first word.

	  Match space or newline, followed by "*", followed by one non-space,
	  followed by anything non-asterisk, followed by "*", followed by
	  space, end-of-sentence punctuation, or the end of the line.
-->
<!DOCTYPE language SYSTEM "language.dtd"
			 [
			 <!ENTITY strongemphasisregex "(\s|^)[\*_]{3}[^\*_]+[\*_]{3}(\s|\.|,|;|:|\-|\?|$)">
			 <!ENTITY strongregex "(\s|^)[\*_]{2}[^\s]{1}[^\*_]+[\*_]{2}(\s|\.|,|;|:|\-|\?|$)">
			 <!ENTITY emphasisregex "(\s|^)[\*_]{1}[^\s]{1}[^\*_]+[\*_]{1}(\s|\.|,|;|:|\-|\?|$)">
			 <!ENTITY reflinkregex '\[[^\]\^]+\]\s*\[[^\]]*\]\s*(\s+\"[^\"]*\"){0,1}'>
			 <!ENTITY reflinktargetregex '\[[^\]\^]+\]\:\s+[^\s]+(\s+\"[^\"]*\"){0,1}'>
			 <!ENTITY footnoteregex "\[\^[^\]]+\]">
			 <!ENTITY inlinelinkregex '\[[^\]\^]+\]\s*\([^\(]*\)'>
			 <!ENTITY inlineimageregex '\!\[[^\]\^]+\]\([^\(]*\)'>
			 <!ENTITY refimageregex '\!\[[^\]\^]+\]\[[^\[]*\]'>
			 <!ENTITY autolinkregex '&lt;(https?|ftp):[^\"&gt;\s]+&gt;'>
			 <!ENTITY mailtolinkregex '&lt;(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)&gt;'>
			 <!ENTITY rulerregex '\s*([\*\-_]\s?){3,}\s*'>
			 <!-- two spaces at end of line generates linebreak -->
			 <!ENTITY linebreakregex "  $">
			 <!ENTITY strikeoutregex "[~]{2}[^~].*[^~][~]{2}"> <!-- pandoc style -->
]>

<language name="Markdown" version="1.2" section="Markup"
		extensions="*.text;*.md;*.mmd;*.markdown" 
		mimetype="text/x-markdown"
		package="mardkdown"
		priority="15"
		author="Darrin Yeager, Claes Holmerson"
		license="GPL,BSD" >

	<highlighting>

		<contexts>
			<context attribute="Normal Text" lineEndContext="#stay" name="Normal Text" >
				<DetectChar context="blockquote" char="&gt;" column="0"/>
				<RegExpr attribute="h1" String="^#\s.*[#]?$" />
				<RegExpr attribute="h1" String="^==+$" />
				<RegExpr attribute="h2" String="^##\s.*[#]?$" />
				<RegExpr attribute="h2" String="^--+$" />
				<RegExpr attribute="h3" String="^###\s.*[#]?$" />
				<RegExpr attribute="h4" String="^####\s.*[#]?$" />
				<RegExpr attribute="h5" String="^#####\s.*[#]?$" />
				<RegExpr attribute="ruler" String="&rulerregex;" />
				<RegExpr attribute="strong" String="&strongregex;" />
				<RegExpr attribute="emphasis" String="&emphasisregex;" />
				<RegExpr attribute="strongemphasis" String="&strongemphasisregex;" />
				<RegExpr attribute="code" String="^([\s]{4,}|\t+).*$" />
				<RegExpr context="bullet" String="^([\s]{0,3})[\*\+\-]\s" />
				<RegExpr context="numlist" String="^([\s]{0,3})[\d]+\.\s" />
				<RegExpr attribute="meta" String="^(Title|Author|Date|Copyright|Revision|CSS|LaTeX\ XSLT|Categories|Tags|BaseName|Excerpt):(.*)+$" />
				<IncludeRules context="inc" />

				<!-- GitHub highlighted code -->
				<RegExpr attribute="code" context="highlightcpp" String="^```c\+\+$" beginRegion="code" />
				<RegExpr attribute="code" context="highlightnone" String="^```[^\s]*" beginRegion="code" />
			</context>

			<context attribute="blockquote" lineEndContext="#pop" name="blockquote">
				<RegExpr attribute="bq-strong" String="&strongregex;" />
				<RegExpr attribute="bq-emphasis" String="&emphasisregex;" />
				<IncludeRules context="inc" />
			</context>

			<context attribute="bullet" lineEndContext="#pop" name="bullet" >
				<RegExpr attribute="bl-strong" String="&strongregex;" />
				<RegExpr attribute="bl-emphasis" String="&emphasisregex;" />
				<IncludeRules context="inc" />
			</context>

			<context attribute="numlist" lineEndContext="#pop" name="numlist" >
				<RegExpr attribute="nl-strong" String="&strongregex;" />
				<RegExpr attribute="nl-emphasis" String="&emphasisregex;" />
				<IncludeRules context="inc" />
			</context>

			<context attribute="comment" lineEndContext="#stay" name="comment" >
				<RegExpr String="--&gt;" attribute="comment" context="#pop" endRegion="comment"/>
			</context>

			<context attribute="common" name="inc" lineEndContext="#stay" >
				<RegExpr attribute="code" String="`[^`]+`" />
				<RegExpr context="comment" String="&lt;!--" beginRegion="comment" />
				<RegExpr attribute="reflink" String="&reflinkregex;" />
				<RegExpr attribute="footnote" String="&footnoteregex;" />
				<RegExpr attribute="inlinelink" String="&inlinelinkregex;"/>
				<RegExpr attribute="reflinktarget" String="&reflinktargetregex;"/>
				<RegExpr attribute="inlineimage" String="&inlineimageregex;"/>
				<RegExpr attribute="refimage" String="&refimageregex;"/>
				<RegExpr attribute="autolink" String="&autolinkregex;"/>
				<RegExpr attribute="mailtolink" String="&mailtolinkregex;"/>
				<RegExpr attribute="strikeout" minimal="true" String="&strikeoutregex;"/>
				<RegExpr attribute="linebreak" minimal="true" String="&linebreakregex;"/>
			</context>

			<!-- GitHub highlighted code -->

			<context attribute="Normal Text" name="highlightnone" lineEndContext="#stay" >
				<IncludeRules context="inccode" />
			</context>

			<context attribute="Normal Text" name="highlightcpp" lineEndContext="#stay" >
				<IncludeRules context="##C++" />
				<IncludeRules context="inccode" />
			</context>

			<context attribute="common" name="inccode" lineEndContext="#stay" >
				<RegExpr attribute="code" context="#pop" String="^```$" endRegion="code" />
			</context>
		</contexts>

		<itemDatas>
			<itemData name="Normal Text" defStyleNum="dsNormal" />
			<itemData name="common" defStyleNum="dsNormal" />
			<itemData name="strongemphasis" defStyleNum="dsNormal" italic="true" bold="true"/>
			<itemData name="emphasis" defStyleNum="dsNormal" italic="true" />
			<itemData name="strong" defStyleNum="dsNormal" bold="true" />
			<itemData name="ruler" defStyleNum="dsNormal" bold="true" />
			<itemData name="strikeout" defStyleNum="dsNormal" strikeOut="true" />
			<itemData name="linebreak" defStyleNum="dsNormal" underline="true" color="#999999"/>
			<itemData name="h1" defStyleNum="dsFunction" bold="true" />
			<itemData name="h2" defStyleNum="dsFunction" bold="true" />
			<itemData name="h3" defStyleNum="dsFunction" bold="true" />
			<itemData name="h4" defStyleNum="dsFunction" bold="true" />
			<itemData name="h5" defStyleNum="dsFunction" bold="true" />
			<itemData name="blockquote" defStyleNum="dsDataType" />
			<itemData name="bq-emphasis" defStyleNum="dsDataType" italic="true" />
			<itemData name="bq-strong" defStyleNum="dsDataType" bold="true" />
			<itemData name="bullet" defStyleNum="dsFloat" />
			<itemData name="bl-emphasis" defStyleNum="dsFloat" italic="true" />
			<itemData name="bl-strong" defStyleNum="dsFloat" bold="true" />
			<itemData name="numlist" defStyleNum="dsFloat" />
			<itemData name="nl-emphasis" defStyleNum="dsFloat" italic="true" />
			<itemData name="nl-strong" defStyleNum="dsFloat" bold="true" />
			<itemData name="comment"  defStyleNum="dsComment" />
			<itemData name="code" defStyleNum="dsBaseN" />
			<itemData name="reflink" defStyleNum="dsOthers" underline="true" />
			<itemData name="inlinelink" defStyleNum="dsOthers" underline="true" />
			<itemData name="autolink" defStyleNum="dsOthers" underline="true" />
			<itemData name="mailtolink" defStyleNum="dsOthers" underline="true" />
			<itemData name="footnote" defStyleNum="dsOthers" italic="true" />
			<itemData name="meta"  defStyleNum="dsComment" />
			<itemData name="reflinktarget" defStyleNum="dsOthers" italic="false" bold="false" />
			<itemData name="inlineimage" defStyleNum="dsAlert" italic="false" bold="false" />
			<itemData name="refimage" defStyleNum="dsAlert" italic="false" bold="false" />
		</itemDatas>

	</highlighting>

	<general>
		<comments>
			<comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
		</comments>
	</general>

</language>
