<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE language SYSTEM "language.dtd" [
<!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#%@-]*">
<!ENTITY varname "\b(?!(?:process|constant|signal|variable))([A-Za-z_][A-Za-z0-9_]*)\b">
<!ENTITY bos "(\b)"> <!-- bol or space following -->
<!-- <!ENTITY bos "^(|.*\s)"> --> <!-- bol or space following -->
<!ENTITY eos "\b"> <!-- eol or space following -->
<!-- <!ENTITY eos "(?=($|\s))"> --> <!-- eol or space following -->
<!ENTITY noword "(?![\w$+-])"> <!-- no word, $, + or - following -->
<!ENTITY label "((&varname;)\s*:\s*)?">
]>
<language name= "VHDL" version= "1.10" kateversion= "2.3" section= "Hardware" extensions= "*.vhdl;*.vhd" mimetype= "text/x-vhdl" author= "Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de)" >
<highlighting >
<list name= "keywordsToplevel" >
<item > file </item>
<!-- <item> package </item> -->
<item > library </item>
<item > use </item>
<!--
<item > entity </item>
<item > architecture </item>
<item > of </item>
<item > configuration </item>
-->
</list>
<list name= "keywords" >
<item > access </item>
<item > after </item>
<item > alias </item>
<item > all </item>
<item > array </item>
<item > assert </item>
<item > assume </item>
<item > assume_guarantee </item>
<item > attribute </item>
<item > begin </item>
<item > block </item>
<item > body </item>
<item > bus </item>
<item > component </item>
<item > constant </item>
<item > context </item>
<item > cover </item>
<item > default </item>
<item > disconnect </item>
<item > downto </item>
<item > end </item>
<item > exit </item>
<item > fairness </item>
<item > file </item>
<item > force </item>
<item > function </item>
<item > generate </item>
<item > generic </item>
<item > group </item>
<item > guarded </item>
<item > impure </item>
<item > inertial </item>
<item > is </item>
<item > label </item>
<item > linkage </item>
<item > literal </item>
<item > map </item>
<item > new </item>
<item > next </item>
<item > null </item>
<item > of </item>
<item > on </item>
<item > open </item>
<item > others </item>
<item > parameter </item>
<item > port </item>
<item > postponed </item>
<item > procedure </item>
<item > process </item>
<item > property </item>
<item > protected </item>
<item > pure </item>
<item > range </item>
<item > record </item>
<item > register </item>
<item > reject </item>
<item > release </item>
<item > report </item>
<item > return </item>
<item > select </item>
<item > sequence </item>
<item > severity </item>
<item > signal </item>
<item > shared </item>
<item > strong </item>
<item > subtype </item>
<item > to </item>
<item > transport </item>
<item > type </item>
<item > unaffected </item>
<item > units </item>
<item > until </item>
<item > variable </item>
<item > vmode </item>
<item > vprop </item>
<item > vunit </item>
<item > wait </item>
<item > when </item>
<item > with </item>
<item > note </item>
<item > warning </item>
<item > error </item>
<item > failure </item>
<item > in </item>
<item > inout </item>
<item > out </item>
<item > buffer </item>
<item > and </item>
<item > abs </item>
<item > or </item>
<item > xor </item>
<item > xnor </item>
<item > not </item>
<item > mod </item>
<item > nand </item>
<item > nor </item>
<item > rem </item>
<item > rol </item>
<item > ror </item>
<item > sla </item>
<item > sra </item>
<item > sll </item>
<item > srl </item>
</list>
<list name= "if" >
<item > if </item>
<item > else </item>
<item > elsif </item>
<item > then </item>
</list>
<list name= "forOrWhile" >
<item > loop </item>
</list>
<list name= "directions" >
<item > in </item>
<item > inout </item>
<item > out </item>
<item > buffer </item>
<item > linkage </item>
</list>
<list name= "signals" >
<item > signal </item>
<item > variable </item>
<item > constant </item>
<item > type </item>
</list>
<!-- <list name="logics">
<item > and </item>
<item > or </item>
<item > xor </item>
<item > not </item>
</list> -->
<list name= "range" >
<item > to </item>
<item > downto </item>
<item > others </item>
</list>
<list name= "case" >
<item > case </item>
<item > when </item>
</list>
<list name= "types" >
<item > bit </item>
<item > bit_vector </item>
<item > character </item>
<item > boolean </item>
<item > boolean_vector </item>
<item > integer </item>
<item > integer_vector </item>
<item > real </item>
<item > real_vector </item>
<item > time </item>
<item > time_vector </item>
<item > delay_length </item>
<item > string </item>
<item > severity_level </item>
<item > positive </item>
<item > natural </item>
<item > file_open_kind </item>
<item > file_open_status </item>
<item > signed </item>
<item > unsigned </item>
<item > unresolved_unsigned </item>
<item > unresolved_signed </item>
<item > line </item>
<item > text </item>
<item > side </item>
<item > width </item>
<item > std_logic </item>
<item > std_logic_vector </item>
<item > std_ulogic </item>
<item > std_ulogic_vector </item>
<item > x01 </item>
<item > x01z </item>
<item > ux01 </item>
<item > ux01z </item>
<item > qsim_state </item>
<item > qsim_state_vector </item>
<item > qsim_12state </item>
<item > qsim_12state_vector </item>
<item > qsim_strength </item>
<item > mux_bit </item>
<item > mux_vector </item>
<item > reg_bit </item>
<item > reg_vector </item>
<item > wor_bit </item>
<item > wor_vector </item>
</list>
<contexts >
<!-- start / global environment -->
<context name= "start" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "architecture_main" insensitive= "true" dynamic= "true" lookAhead= "true"
String="architecture\s+(&varname; )" />
<StringDetect attribute= "Control" context= "entity" String= "entity" />
<RegExpr attribute= "Normal Text" context= "package" insensitive= "true" lookAhead= "true" beginRegion= "PackageRegion1"
String="&bos; (package\s+(&varname; )\s+is)&eos; "/>
<RegExpr attribute= "Normal Text" context= "packagebody" lookAhead= "true" insensitive= "true" beginRegion= "PackageBodyRegion1"
String="&bos; (package\s+body\s+(&varname; )\s+is)&eos; "/>
<!-- <StringDetect attribute="Control" context="arch_decl" String="package" />temporary -->
<keyword attribute= "Keyword" context= "#stay" String= "keywordsToplevel" />
</context>
<context name= "package" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<StringDetect attribute= "Redirection" context= "#stay" String= "%2" dynamic= "true" />
<IncludeRules context= "preDetection" />
<StringDetect attribute= "Redirection" context= "#stay" String= "begin" insensitive= "true" />
<RegExpr attribute= "Redirection" context= "#pop" String= "&bos;end(\s+package)?(\s+%3)?\s*;" dynamic= "true" endRegion= "PackageRegion1" insensitive= "true" />
<IncludeRules context= "generalDetection" />
</context>
<!-- package body environment -->
<context name= "packagebody" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<StringDetect attribute= "Redirection" context= "#stay" String= "%2" dynamic= "true" />
<IncludeRules context= "preDetection" />
<StringDetect attribute= "Redirection" context= "#stay" String= "begin" insensitive= "true" />
<RegExpr attribute= "Redirection" context= "#pop" String= "&bos;end(\s+package)?(\s+%3)?\s*;" dynamic= "true" endRegion= "PackageBodyRegion1" insensitive= "true" />
<IncludeRules context= "generalDetection" />
</context>
<!-- ====ARCHITECTURE =============== -->
<context name= "architecture_main" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "arch_decl" insensitive= "true" beginRegion= "ArchitectureRegion1"
String="architecture\s+(&varname; )\s+of\s+(&varname; )\s+is" />
<RegExpr attribute= "Control" context= "#pop#pop" insensitive= "true" dynamic= "true" endRegion= "ArchitectureRegion1"
String="&bos; end(\s+architecture)?(\s+%1)?\s*;" />
<RegExpr attribute= "Error" context= "#pop#pop" insensitive= "true" dynamic= "true" endRegion= "ArchitectureRegion1"
String="&bos; end(\s+architecture)?(\s+&varname; )\s*;" />
<IncludeRules context= "detect_arch_parts" />
</context>
<!-- architecture environment "before begin" -->
<context name= "arch_decl" attribute= "Normal Text" lineEndContext= "#stay" >
<IncludeRules context= "preDetection" />
<keyword attribute= "Signal" context= "signal" insensitive= "true" String= "signals" />
<StringDetect attribute= "Control" context= "entity" insensitive= "true" String= "component" />
<StringDetect attribute= "Control" context= "#pop" insensitive= "true" String= "begin" />
<IncludeRules context= "generalDetection" />
</context>
<!-- parts of architecture body -->
<context name= "detect_arch_parts" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<RegExpr attribute= "Normal Text" context= "generate1" lookAhead= "true" insensitive= "true" dynamic= "true"
String="&bos; ((&varname; )\s*:\s*)(if|for).*\s+generate&eos; " />
<RegExpr attribute= "Normal Text" context= "process1" lookAhead= "true" insensitive= "true" dynamic= "true"
String="&bos; ((&varname; )\s*:\s*)?process&eos; " />
<RegExpr attribute= "Normal Text" context= "instance" lookAhead= "true" insensitive= "true" dynamic= "true" beginRegion= "InstanceRegion1"
String="\b(&varname; )\s*:\s*(&varname; )" />
<IncludeRules context= "generalDetection" />
</context>
<!-- ====generate =============== -->
<context name= "generate1" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "generate2" insensitive= "true" beginRegion= "GenerateRegion"
String="&bos; generate&eos; " />
<RegExpr attribute= "Name" context= "#stay" dynamic= "true" insensitive= "true"
String="&bos; %3&eos; " />
<StringDetect attribute= "Control" context= "#stay" insensitive= "true" String= "for" />
<StringDetect attribute= "Control" context= "#stay" insensitive= "true" String= "if" />
<IncludeRules context= "generalDetection" />
</context>
<context name= "generate2" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<StringDetect attribute= "Control" context= "#stay" insensitive= "true"
String="begin"/>
<RegExpr attribute= "Control" context= "#pop#pop" insensitive= "true" endRegion= "GenerateRegion"
String="&bos; end\s+generate(\s+&varname; )?\s*;"/>
<IncludeRules context= "detect_arch_parts" />
</context>
<!-- ====process =============== -->
<!-- process environment -->
<context name= "process1" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Process" context= "#pop" insensitive= "true" dynamic= "true" endRegion= "RegionProcess"
String="end\s+process(\s+%3)?\s*;" />
<RegExpr attribute= "Error" context= "#pop" insensitive= "true" dynamic= "true" endRegion= "RegionProcess"
String="end\s+process(\s+&varname; )?" />
<StringDetect attribute= "Process" context= "#stay" insensitive= "true" beginRegion= "RegionProcess"
String="process" />
<StringDetect attribute= "Process" context= "#stay" insensitive= "true"
String="begin" />
<IncludeRules context= "proc_rules" />
</context>
<context name= "proc_rules" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<RegExpr attribute= "Name" context= "#stay" insensitive= "true"
String="&bos; &varname; (?=\s*:(?!=))" />
<RegExpr attribute= "Control" context= "if_start" insensitive= "true"
String="&bos; (if)&eos; " />
<RegExpr attribute= "Control" context= "case1" lookAhead= "true" insensitive= "true" dynamic= "true" beginRegion= "CaseRegion1"
String="&bos; (case)&eos; " />
<RegExpr attribute= "Control" context= "forOrWhile" insensitive= "true" beginRegion= "ForOrWhileRegion1"
String="&bos; &label; ((for|while)\s+.+\s+)?loop&eos; "/>
<IncludeRules context= "generalDetection" />
</context>
<!-- ====instance =============== -->
<context name= "instance" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Name" context= "#stay" String= "\b%1\b" dynamic= "true" />
<RegExpr attribute= "Name" context= "#stay" String= "\b%2\b" dynamic= "true" />
<Detect2Chars attribute= "Normal Text" context= "#pop" char= ")" char1= ";" endRegion= "InstanceRegion1" />
<!-- <DetectChar attribute="Error" context="#stay" char=";" /> -->
<IncludeRules context= "generalDetection" />
</context>
<!-- ====loop =============== -->
<context name= "forOrWhile" attribute= "Normal Text" lineEndContext= "#stay" >
<RegExpr attribute= "Control" context= "#pop" endRegion= "ForOrWhileRegion1" insensitive= "true"
String="&bos; end\s+loop(\s+&varname; )?\s*;"/>
<keyword attribute= "Control" context= "#stay" String= "forOrWhile" />
<IncludeRules context= "proc_rules" />
</context>
<!-- ====if =============== -->
<context name= "if_start" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<StringDetect attribute= "Control" context= "if" insensitive= "true" beginRegion= "IfRegion1"
String="then" />
<IncludeRules context= "generalDetection" />
</context>
<context name= "if" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "#pop#pop" insensitive= "true" endRegion= "IfRegion1"
String="&bos; end\s+if(\s+&varname; )?\s*;"/>
<IncludeRules context= "proc_rules" />
<keyword attribute= "Control" context= "#stay" insensitive= "true"
String="if"/>
</context>
<!-- ====case =============== -->
<context name= "case1" attribute= "Normal Text" lineEndContext= "#stay" >
<IncludeRules context= "preDetection" />
<StringDetect attribute= "Keyword" context= "case2" insensitive= "true"
String="is"/>
<keyword attribute= "Control" context= "#stay" insensitive= "true"
String="case"/>
</context>
<context name= "case2" attribute= "Normal Text" lineEndContext= "#stay" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "#pop#pop" insensitive= "true" endRegion= "CaseRegion1"
String="&bos; end\s+case(\s+&varname; )?\s*;"/>
<StringDetect attribute= "Control" context= "caseWhen" insensitive= "true" beginRegion= "CaseWhenRegion1"
String="when"/>
<IncludeRules context= "proc_rules" />
</context>
<context name= "caseWhen" attribute= "Normal Text" lineEndContext= "#stay" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "#pop" lookAhead= "true" insensitive= "true" endRegion= "CaseWhenRegion1"
String="&bos; when&eos; " />
<RegExpr attribute= "Control" context= "#pop" lookAhead= "true" insensitive= "true" endRegion= "CaseWhenRegion1"
String="&bos; end\s+case(\s+&varname; )?\s*;"/>
<IncludeRules context= "proc_rules" />
</context>
<!-- ====ENTITY =============== -->
<!-- entity environment -->
<context name= "entity" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Name" context= "entity_main" beginRegion= "EntityRegion1" insensitive= "true" String= "(&varname;)" />
<IncludeRules context= "generalDetection" />
</context>
<context name= "entity_main" attribute= "Normal Text" lineEndContext= "#stay" dynamic= "true" >
<IncludeRules context= "preDetection" />
<RegExpr attribute= "Control" context= "#pop#pop" dynamic= "true" insensitive= "true" endRegion= "EntityRegion1"
String="&bos; end(\s+(entity|component))?(\s+%1)?\s*;" />
<RegExpr attribute= "Error" context= "#pop#pop" dynamic= "true" insensitive= "true" endRegion= "EntityRegion1"
String="&bos; end(\s+(entity|component))?(\s+&varname; )?\s*;" />
<RegExpr attribute= "Control" context= "#stay" String= "generic" />
<RegExpr attribute= "Control" context= "#stay" String= "port" />
<IncludeRules context= "generalDetection" />
</context>
<!-- ====Basic Stuff =============== -->
<!-- basic rules -->
<context name= "preDetection" attribute= "Normal Text" lineEndContext= "#stay" >
<Detect2Chars attribute= "Comment" context= "comment" char= "-" char1= "-" />
<DetectChar attribute= "Vector" context= "string" char= """ />
<AnyChar attribute= "Operator" context= "#stay" String= "[&><=:+\-*\/|].," />
<DetectChar attribute= "Attribute" context= "attribute" char= "'" />
</context>
<!-- general detection -->
<context name= "generalDetection" attribute= "Normal Text" lineEndContext= "#stay" >
<keyword attribute= "Data Type" context= "#stay" String= "types" />
<keyword attribute= "Signal" context= "signal" String= "signals" beginRegion= "sig" />
<keyword attribute= "Range" context= "#stay" String= "range" />
<keyword attribute= "Keyword" context= "#stay" String= "keywords" />
<Int attribute= "Integer" context= "#stay" />
<HlCChar attribute= "Bit" context= "#stay" />
<DetectSpaces attribute= "Normal Text" context= "#stay" />
</context>
<!-- other environments -->
<context name= "comment" attribute= "Comment" lineEndContext= "#pop" />
<context name= "string" attribute= "Vector" lineEndContext= "#stay" >
<DetectChar attribute= "Vector" context= "#pop" char= """ />
</context>
<context name= "attribute" attribute= "Attribute" lineEndContext= "#pop" >
<DetectChar attribute= "Attribute" context= "quot in att" char= """ />
<DetectChar attribute= "Normal Text" context= "#pop" char= " " />
<DetectChar attribute= "Attribute" context= "#pop" char= "'" />
<AnyChar attribute= "Attribute" context= "#pop" String= "()=<>" />
</context>
<context name= "quot in att" attribute= "Attribute" lineEndContext= "#stay" >
<DetectChar attribute= "Attribute" context= "#pop" char= """ />
</context>
<context name= "signal" attribute= "Normal Text" lineEndContext= "#stay" >
<IncludeRules context= "preDetection" />
<DetectChar attribute= "Normal Text" context= "#pop" char= ";" endRegion= "sig" />
<IncludeRules context= "generalDetection" />
</context>
</contexts>
<itemDatas >
<itemData name= "Normal Text" defStyleNum= "dsNormal" />
<itemData name= "Keyword" defStyleNum= "dsKeyword" />
<itemData name= "Data Type" defStyleNum= "dsDataType" />
<itemData name= "Comment" defStyleNum= "dsComment" />
<itemData name= "Integer" defStyleNum= "dsDecVal" />
<itemData name= "Bit" defStyleNum= "dsChar" />
<itemData name= "Error" defStyleNum= "dsError" color= "#f00" bold= "1" />
<itemData name= "Vector" defStyleNum= "dsString" />
<itemData name= "Operator" defStyleNum= "dsOthers" />
<itemData name= "Attribute" defStyleNum= "dsBaseN" />
<itemData name= "Region Marker" defStyleNum= "dsRegionMarker" />
<itemData name= "Signal" defStyleNum= "dsOthers" />
<itemData name= "Range" defStyleNum= "dsOthers" />
<itemData name= "Redirection" defStyleNum= "dsKeyword" color= "#238" />
<itemData name= "Process" defStyleNum= "dsKeyword" color= "#09A" />
<itemData name= "Control" defStyleNum= "dsKeyword" color= "#238" />
<itemData name= "Name" defStyleNum= "dsKeyword" color= "#b60" bold= "1" />
</itemDatas>
</highlighting>
<general >
<comments >
<comment name= "singleLine" start= "--" />
</comments>
<keywords casesensitive= "0" />
</general>
</language>