<?xml version="1.0" encoding="UTF-8"?>
<EdnLang version="0.1" lang="C++">
	<ext>.*\.(cpp|cxx|cc|h|hpp|hxx|mm)</ext>
	<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
		<rule name="doxygen multiline">
			<color>commentDoxygen</color>
			<regex>/\*(\*|!)(.|\r|\n)*?\*/</regex>
			<sub>doxyparse</sub>
		</rule>
		<rule name="comment multiline">
			<color>comment</color>
			<regex>/\*(.|\r|\n)*?(\*/|\0)</regex>
			<sub>TODO</sub>
		</rule>
		<rule name="comment multiline ERROR">
			<color>SYNTAX_ERROR</color>
			<regex>/\*(.|\r|\n)*</regex>
		</rule>
		<rule name="#if 0">
			<color>preprocesseur</color>
			<regex>#[ \t]*if 0(.|\r|\n)*?#(endif|else)</regex>
		</rule>
		<rule name="#if 0 ERROR">
			<color>SYNTAX_ERROR</color>
			<regex>#[ \t]*if 0(.|\r|\n)*</regex>
		</rule>
		<rule name="#preproc">
			<color>preprocesseur</color>
			<regex>#(.|\\[\\\n])*</regex>
		</rule>
		<rule name="inline doxygen">
			<color>commentDoxygen</color>
			<regex>//!.*</regex>
			<sub>doxyparse</sub>
		</rule>
		<rule name="inline comment">
			<color>comment</color>
			<regex>//.*</regex>
			<sub>TODO</sub>
		</rule>
		<rule name="double quote text">
			<color>doubleQuoteText</color>
			<regex>(U|u|u8)?&quot;(.|\\[\\&quot;])*?&quot;</regex> <!-- " -->
		</rule>
		<rule name="simple quote text">
			<color>doubleQuoteText</color>
			<regex>&apos;\\?.&apos;</regex>
		</rule>
	</pass1>
	<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
		<rule name="old school elements">
			<color>SYNTAX_ERROR</color>
			<regex>&apos;|&quot;|NULL|MAX|MIN|TRUE|FALSE|calloc|malloc|realloc|free|BOOL</regex>
		</rule>
		<rule name="my keyword">
			<color>keyword</color>
			<regex>\b(return|goto|if|else|case|default|switch|break|continue|while|do|for|sizeof)\b</regex>
		</rule>
		<rule name="my function keyword">
			<color>systemFunction</color>
			<regex>\b(new|delete|try|catch|memset|fopen|fread|fwrite|fgets|fclose|printf|(f|s|diag_)printf|(reinterpret|static|dynamic|const)_cast)\b</regex>
		</rule>
		<rule name="my type">
			<color>type</color>
			<regex>\b(bool|char(16_t|32_t)?|double|float|u?int(8|16|32|64|128)?(_t)?|long|short|signed|size_t|unsigned|void|(I|U)(8|16|32|64|128))\b</regex>
		</rule>
		<rule name="std type">
			<color>type</color>
			<regex>\b(std(11)?|boost)::[\w:]*\b</regex>
		</rule>
		<rule name="my storage keyword">
			<color>storageKeyword</color>
			<regex>\b(inline|const|class|namespace|virtual|private|public|protected|friend|const|extern|mutable|auto|register|static|unsigned|signed|volatile|char|double|float|int|long|short|void|typedef|struct|union|enum)\b</regex>
		</rule>
		<rule name="my common Define">
			<color>commonDefine</color>
			<regex>\b(nullptr|__(LINE|DATA|FILE|func|TIME|STDC)__)\b</regex>
		</rule>
		<rule name="numeric constant">
			<color>number</color>
			<regex>\b(((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(LL|L|l|UL|ul|u|U|F|f)?)\b</regex>
		</rule>
		<rule name="my boolean">
			<color>boolean</color>
			<regex>\b(true|false)\b</regex>
		</rule>
		<rule name="BIG LETTER">
			<color>macro</color>
			<regex>\b([A-Z_][A-Z_0-9]{3,500})\b</regex>
		</rule>
		<rule name="CPP member">
			<color>memberClass</color>
			<regex>\bm_\w+\b</regex>
		</rule>
		<rule name="function input">
			<color>inputFunction</color>
			<regex>\b_\w+\b</regex>
		</rule>
		<rule name="Function name">
			<color>functionName</color>
			<regex>\b((\w|_)+[ \t]*\()</regex>
		</rule>
		<rule name="condition">
			<color>boolean</color>
			<regex>==|&lt;=|&gt;=|!=|&lt;{1,2}|&gt;{1,2}|&amp;&amp;|\{|\}</regex>
		</rule>
		<rule name="simpleQuteTextError">
			<color>SYNTAX_ERROR</color>
			<regex>&apos;|&quot;</regex>
		</rule>
	</pass2>
	<pass name="doxyparse">
		<rule name="knownkey">
			<color>doxygen-key-known</color>
			<regex>(@|\\)[\t ]*(addindex|addtogroup|anchor|arg|attention|author|authors|a|brief|bug|b|callgraph|category|cite|class|code|cond|copybrief|copydetails|copydoc|copyright|date|def|defgroup|deprecated|details|diafile|dir|docbookonly|dontinclude|dot|dotfile|else|elseif|em|endcode|endcond|enddocbookonly|enddot|endhtmlonly|endif|endinternal|endlatexonly|endlink|endmanonly|endmsc|endparblock|endrtfonly|endsecreflist|endverbatim|enduml|endxmlonly|enum|example|exception|extends|e|file|fn|headerfile|hidecallergraph|hidecallgraph|hideinitializer|htmlinclude|htmlonly|idlexcept|ifnot|if|image|implements|includelineno|include|ingroup|internal|invariant|interface|latexinclude|latexonly|line|link|license|li|mainpage|manonly|memberof|msc|mscfile|name|namespace|nosubgrouping|note|n|overload|package|page|paragraph|param|parblock|par|post|pre|private|privatesection|property|protected|protectedsection|protocol|public|publicsection|pure|p|refitem|ref|related|relates|relatedalso|relatesalso|remark|remarks|result|return|returns|retval|rtfonly|sa|secreflist|section|see|short|showinitializer|since|skip|skipline|snippet|startuml|struct|subpage|subsection|subsubsection|tableofcontents|test|throw|throws|todo|tparam|typedef|union|until|var|verbatim|verbinclude|version|vhdlflow|warning|weakgroup|xmlonly|xrefitem)</regex>
		</rule>
		<rule name="key">
			<color>doxygen-key</color>
			<regex>(@|\\)[\t ]*\w+</regex>
		</rule>
		<rule name="in-out">
			<color>doxygen-in-out</color>
			<regex>\[(in|in,out|out)\]</regex>
		</rule>
		<rule name="function input">
			<color>inputFunction</color>
			<regex>\b_\w+\b</regex>
		</rule>
	</pass>
	<pass name="TODO">
		<rule name="function input">
			<color>SYNTAX_ERROR</color>
			<regex>TODO[ \t]*:.*</regex>
		</rule>
	</pass>
</EdnLang>
