The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN"
  "http://colorer.sf.net/2003/hrc.dtd">
<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://colorer.sf.net/2003/hrc http://colorer.sf.net/2003/hrc.xsd">
<type name="cpp">

 <annotation>
 <documentation>
    c++ syntax description
 </documentation><contributors><![CDATA[
    Vladimir Tarasov <tsoftgroup@chat.ru>
    Timur Safin <timur@lanit.ru>
    cail: split into two schemes: c and cpp

    Eugene Efremov <4mirror@mail.ru>:
     - split c/c++ outlines
     - add temlpates
     - add STL keywords
     - change regions routing
 ]]></contributors>
 </annotation>

 <region name="KeywordSTL" parent="c:KeywordStdio"/>
 <region name="KeywordNamespace" parent="def:Prefix"/>
 <region name="ClassOutline" parent="c:StructOutline"/>

 <scheme name="Expression">

  <annotation>
   <documentation>
    Next blocks supported C++ templates
   </documentation>
   <appinfo> <todo> <![CDATA[

    Áëîê #1.

     It's ok.

    Áëîê #2.

     Hà òåêóùèé ìîìåíò :

     - Ðàñïîçíàåò è èãíîðèðóåò êîíñòðóêöèè òèïà a<<b<<c>>d è a<c && b>d.

     - Êîððåêòíî ðàáîòàåò ñ êîíñòóêöèÿìè òèïà vector<void (*)(int, int)>
       è vector<int*[],std::allocator<int*[]>>.

     - Ïîääåðæèâàåòñÿ òîëüêî 6 óðîâíåé âëîæåíèÿ. ß íå çíàþ, âîìçîæíà ëè
       êîððåêòíàÿ ðåêóðñèÿ â ðåãýêñïàõ, à áåç íåå áåñêîíå÷íîå ÷èñëî
       âëîæåíèé íåâîçìîæíî (âïîð÷åì, íà ïðàêòèêå 6 è óðîâíåé òåìïëàéòîâ
       íå âñòðå÷àåòñÿ).

     - Ê ñîæàëåíèþ, îáëàìûâàåòñÿ ïðè ïåðåíîñàõ: /s íå ðàáîòàåò.

     - Ãëþ÷èò ñ  êîíñòðóêöèÿìè òèïà a<b & b>s è if(b<c>d) - êîòîðûå,
       îáû÷íî, ÿâëÿþòñÿ îøèáêàìè.

     Âûâîä: ïðîáëåìíîé, òðåáóþùåé èñïðàâëåíèÿ, îñòàåòñÿ òîëüêî /s. Âîçìîæíà
     ëè âîîáùå ïîääåðæêà ýòîé îïöèè â ðàìêàõ êîëîðåðà?

   ]]> </todo> </appinfo>
  </annotation>

  <!-- !!EE: Block #1 template support -->
  <block start="/(template)\s*(&lt;)/" end="/(&gt;)/" scheme="Expression"
   region00="def:PairStart" region10="def:PairEnd"
   region01="c:KeywordANSI" region02="c:StructureSymbol"
   region11="c:StructureSymbol"
  />

  <!-- !!EE: Block #2 template support -->
  <!-- Colorer 4:
  <block start="/([\w\s])?#1(&lt;)(&lt;)?!
     ((([\w_\s\*\n\r,:])|(&amp;(&amp;)?!)|
     (&lt;(([\w_\s\*\n\r,:])|(&amp;(&amp;)?!)|
     (&lt;(([\w_\s\*\n\r,:])|(&amp;(&amp;)?!)|
     (&lt;(([\w_\s\*\n\r,:])|(&amp;(&amp;)?!)|
     (&lt;(([\w_\s\*\n\r,:])|(&amp;(&amp;)?!)|
     (&lt;(([\w_\s\*\n\r,:])|(&amp;(&amp;)?!))*&gt;)
     )*&gt;))*&gt;))*&gt;))*&gt;))*&gt;)?=/xs"
   end="/(&gt;)/" scheme="cpp"
   region00="dpOpenStruct" region10="dpCloseStruct"
   region02="dSymbol2" region11="dSymbol2"/>-->
   <!-- \(\)\[\] -->
  <block scheme="Expression">
   <start region0="def:PairStart" region2="c:StructureSymbol">
    <![CDATA[
     /([\w\s])?#1
      (<)(<)?!\M
       ([\w_\s\*\(\)\[\],:]|&(&)?!|<
       ([\w_\s\*\(\)\[\],:]|&(&)?!|<
       ([\w_\s\*\(\)\[\],:]|&(&)?!|<
       ([\w_\s\*\(\)\[\],:]|&(&)?!|<
       ([\w_\s\*\(\)\[\],:]|&(&)?!|<
       ([\w_\s\*\(\)\[\],:]|&(&)?!)*
      >)*>)*>)*>)*>)*>
     /xs
    ]]>
   </start>
   <end region0="def:PairEnd" region1="c:StructureSymbol">/(&gt;)/</end>
  </block>

<!--
    <![CDATA[
     /([\w\s])?#1
      (<)(<)?!
      \M(([\w_\s\*\n\r,:]|&(&)?!)|
      (<(([\w_\s\*\n\r,:]|&(&)?!)|
      (<(([\w_\s\*\n\r,:]|&(&)?!)|
      (<(([\w_\s\*\n\r,:]|&(&)?!)|
      (<(([\w_\s\*\n\r,:]|&(&)?!)|
      (<(([\w_\s\*\n\r,:]|&(&)?!))*>)
      )*>))*>))*>))*>))*>
     /xs
    ]]>

-->
  <inherit scheme="AFX-block"/>

  <!-- c++ keywords -->

  <!-- EE: now we don't need it...
  regexp match="/^\s*(private|protected|public)(:)/"
   region1="c:KeywordANSI" region2="c:Label"
  /-->

  <keywords region="c:KeywordANSI">
   <word name="and"/>
   <word name="and_eq"/>
   <word name="bitand"/>
   <word name="bitor"/>
   <word name="bool" region="c:KeywordANSI.typenames"/>
   <word name="catch"/>
   <word name="compl"/>
   <word name="const_cast"/>
   <word name="class"/>
   <word name="delete"/>
   <word name="dynamic_cast"/>
   <word name="false"/>
   <word name="friend"/>
   <word name="mutable"/>
   <word name="namespace"/>
   <word name="new"/>
   <word name="not"/>
   <word name="not_eq"/>
   <word name="operator"/>
   <word name="or"/>
   <word name="or_eq"/>
   <word name="private"/>
   <word name="protected"/>
   <word name="public"/>
   <word name="reinterpret_cast"/>
   <word name="static_cast"/>
   <word name="template"/>
   <word name="this"/>
   <word name="throw"/>
   <word name="true"/>
   <word name="try"/>
   <word name="typeid"/>
   <word name="typename"/>
   <word name="virtual"/>
   <word name="xor"/>
   <word name="xor_eq"/>
   <word name="__based"/>
   <word name="__novtordisp"/>
   <word name="__self"/>
   <word name="__single_inheritance"/>
   <word name="__uuidof"/>
   <word name="__virtual_inheritance"/>
  </keywords>


  <inherit scheme="c:Expression">
   <virtual scheme="c:Expression" subst-scheme="Expression"/>
  </inherit>

  <inherit scheme="Keywords-STL"/>
 </scheme>

 <scheme name="AFX-block" if="afx-defines">
  <!-- paired block -->
  <block start="/(\/\/\{\{AFX.*)/" end="/(\/\/\}\}AFX.*)/" scheme="def:Comment"
         region="def:CommentContent" region00="def:PairStart" region10="def:PairEnd" region01="def:Comment" region11="def:Comment"/>
 </scheme>

 <scheme name="Keywords-STL" if="stl-defines">
<!-- !!EE (add keywords): STL  -->
  <keywords region="KeywordSTL">
   <word name="std" region="KeywordNamespace"/>

   <word name="vector"/>
   <word name="list"/>
   <word name="set"/>
   <word name="multiset"/>
   <word name="map"/>
   <word name="multimap"/>
   <word name="hash_map"/>
   <word name="deque"/>
   <word name="stack"/>
   <word name="queue"/>
   <word name="priority_queue"/>
   <word name="string"/>
   <word name="array"/>
   <word name="valarray"/>
   <word name="biset"/>

   <word name="char_traits"/>
   <word name="basic_string"/>
   <word name="npos" region="c:KeywordConstant"/>

   <word name="ios_base"/>
   <word name="ios"/>
   <word name="basic_ios"/>
   <word name="locate"/>
   <word name="basic_iostream"/>
   <word name="basic_streambuf"/>
   <word name="iostream"/>
   <word name="streambuf"/>
   <word name="istream"/>
   <word name="ostream"/>
   <word name="ifstream"/>
   <word name="ofstream"/>
   <word name="fstream"/>
   <word name="istringstream"/>
   <word name="ostringstream"/>
   <word name="stringstream"/>
   <word name="cout"/>
   <word name="cerr"/>
   <word name="clog"/>
   <word name="cin"/>

   <word name="iterator"/>
   <word name="const_iterator"/>
   <word name="input_iterator"/>
   <word name="output_iterator"/>
   <word name="insert_iterator"/>
   <word name="front_insert_iterator"/>
   <word name="back_insert_iterator"/>
   <word name="reverse_iterator"/>
   <word name="const_reverse_iterator"/>
   <word name="istream_iterator"/>
   <word name="ostream_iterator"/>
   <word name="refrence"/>
   <word name="pointer"/>
   <word name="const_refrence"/>
   <word name="const_pointer"/>

   <word name="raw_storage_iterator"/>
   <word name="allocator"/>
   <word name="auto_ptr"/>
   <word name="pair"/>

   <!-- alogoritms -->
   <word name="for_each"/>
   <word name="find"/>
   <word name="find_if"/>
   <word name="find_end"/>
   <word name="find_first_of"/>
   <word name="adjacent_find"/>
   <word name="count"/>
   <word name="count_if"/>
   <word name="mismatch"/>
   <word name="equal"/>
   <word name="search"/>
   <word name="search_n"/>
   <word name="transform"/>
   <word name="copy"/>
   <word name="copy_backward"/>
   <word name="swap"/>
   <word name="iter_swap"/>
   <word name="swap_ranges"/>
   <word name="replace"/>
   <word name="replace_if"/>
   <word name="replace_copy"/>
   <word name="replace_copy_if"/>
   <word name="fill"/>
   <word name="fill_n"/>
   <word name="generate"/>
   <word name="generate_n"/>
   <word name="remove"/>
   <word name="remove_if"/>
   <word name="remove_copy"/>
   <word name="remove_copy_if"/>
   <word name="unique"/>
   <word name="unique_copy"/>
   <word name="reverse"/>
   <word name="reverse_copy"/>
   <word name="rotate"/>
   <word name="rotate_copy"/>
   <word name="random_shuffle"/>
   <word name="sort"/>
   <word name="stable_sort"/>
   <word name="partial_sort"/>
   <word name="partial_sort_copy"/>
   <word name="lower_bound"/>
   <word name="upper_bound"/>
   <word name="equal_range"/>
   <word name="binary_search"/>
   <word name="merge"/>
   <word name="inplace_merge"/>
   <word name="partition"/>
   <word name="stable_partition"/>
   <word name="includes"/>
   <word name="set_union"/>
   <word name="set_intersection"/>
   <word name="set_difference"/>
   <word name="set_symmetric_difference"/>
   <word name="make_heap"/>
   <word name="push_heap"/>
   <word name="pop_heap"/>
   <word name="sort_heap"/>
   <word name="min"/>
   <word name="max"/>
   <word name="min_element"/>
   <word name="max_element"/>
   <word name="lexicogarfical_compare"/>
   <word name="next_permutation"/>
   <word name="prev_permutation"/>

   <word name="equal_to"/>
   <word name="not_equal_to"/>
   <word name="greater"/>
   <word name="less"/>
   <word name="greater_equal"/>
   <word name="less_equal"/>
   <word name="logical_and"/>
   <word name="logical_or"/>
   <word name="logical_not"/>
   <word name="plus"/>
   <word name="minus"/>
   <word name="multiples"/>
   <word name="divides"/>
   <word name="modulus"/>
   <word name="negate"/>

   <word name="bind2nd"/>
   <word name="bind1st"/>
   <word name="mem_fun"/>
   <word name="mem_fun_t"/>
   <word name="const_mem_fun_t"/>
   <word name="mem_fun_ref"/>
   <word name="mem_fun_ref_t"/>
   <word name="const_mem_fun_ref_t"/>
   <word name="ptr_fun"/>
   <word name="not1"/>
   <word name="not2"/>
   <word name="pointer_to_unary_function"/>
   <word name="pointer_to_binary_function"/>
   <word name="unary_negate"/>
   <word name="binary_negate"/>

   <!-- stdexept -->
   <word name="exception"/>
   <word name="logic_error"/>
   <word name="domain_error"/>
   <word name="out_of_range"/>
   <word name="invalid_argument"/>
   <word name="runtime_error"/>
   <word name="range_error"/>
   <word name="overflow_error"/>
   <word name="underflow_error"/>
   <word name="bad_alloc"/>
   <word name="bad_cast"/>
   <word name="bad_exeption"/>
   <word name="bad_typeid"/>
   <word name="failure"/>
  </keywords>
 </scheme>

 <scheme name="Outlines">
  <annotation>
   <documentation>
     C++ outlines (function, classes).
   </documentation>
  </annotation>

  <!-- Colorer 4:
  <regexp match='/^ \M \s* (typedef)?! (\w[\w_*&amp;&lt;&gt;,~:]+ \s
   [\s\w_*&amp;&lt;&gt;,~\":]*?)? (([\:\w_*&amp;~]+?)|(operator..?)
   (\sfor)?~4 (\sif)?~3 (\swhile)?~6 (\sswitch)?~7 (\scatch)?~6 )
   \s* (\([^\)]*?\) (\s*\:\s*[^;]*?)|([^;,&gt;]*?) ) | ( \([^\);]*?) ($|\{)/x'
    region3="cFunc"/>-->

  <regexp><![CDATA[
    /^ \M \s* (typedef)?!
    (\w[\w_*&<>~,:]+ \s [\s\w_*&<>~\",:]*?)?

    (?{c:FuncOutline}
     ([\w_][\w_<*&,\s:>]*?\:\:)? ([\:\w_&*~<>]+?|operator..?)
    )

    (\sfor)?~4 (\sif)?~3 (\swhile)?~6 (\sswitch)?~7 (\scatch)?~6
    \s* (\([^\)]*?\) (\s*\:\s*[^;]*?|[^;,<>]*?)  |  \([^\);]*?)
    ($|\{) /x
  ]]></regexp>
<!--
   Ô'öèÿ(...) äàëüøå ": ..."      èëè íå';,<'    èëè ñêîáêè ïåðåíîñÿòñÿ
   (Ýòî áûëî îïèñàíèå ïðåäïîñëåäíåé ñòðîêè ðåãýêñïà)
-->

  <!--Colorer 4:
  <regexp match='/^ \M \s* ( ((typedef\s+)|(template\s*&lt;.*?&gt;\s*))?
   (struct)|(class)|(union) \s+ ([\w_]+) [\w_:\s]* &lt;?.*?&gt;?)
   ((;)?~1$)|(\{)/x' region8="cFunc"/><!-->

  <regexp><![CDATA[
    /^ \M \s*
    ((typedef\s+)|(template\s*<.*?>\s*))?
    (class) \s+
    (?{ClassOutline}
     [\:\w_&~<>]+ [\w_:<>\s]*? [^;]
    )
    ($|\{)/x
  ]]></regexp>

  <regexp><![CDATA[
    /^ \M \s*
    ((typedef\s+)|(template\s*<.*?>\s*))?
    (struct) \s+
    (?{c:StructOutline}
     [\:\w_&~<>]+ [\w_:<>\s]*? [^;]
    )
    ($|\{)/x
  ]]></regexp>

  <inherit scheme="c:SharedOutlines"/>
 </scheme>


 <scheme name="Operators">
  <annotation>
   <documentation>
    ANSI C++ keyword operators.
   </documentation>
   <appinfo> <todo> <![CDATA[
    Not realised now. See annotation/appinfo/todo at c:Operator for more...
   ]]> </todo> </appinfo>
  </annotation>
  <inherit scheme="c:Operators"/>
 </scheme>

 <scheme name="cpp">
  <inherit scheme="c:c">
   <virtual scheme="c:Operators" subst-scheme="Operators"/>
   <virtual scheme="c:Outlines" subst-scheme="Outlines"/>
   <virtual scheme="c:Expression" subst-scheme="Expression"/>
   <virtual scheme="c:c" subst-scheme="cpp"/>
  </inherit>
 </scheme>


</type>

</hrc>
<!-- ***** BEGIN LICENSE BLOCK *****
   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
   -
   - The contents of this file are subject to the Mozilla Public License Version
   - 1.1 (the "License"); you may not use this file except in compliance with
   - the License. You may obtain a copy of the License at
   - http://www.mozilla.org/MPL/
   -
   - Software distributed under the License is distributed on an "AS IS" basis,
   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   - for the specific language governing rights and limitations under the
   - License.
   -
   - The Original Code is the Colorer Library.
   -
   - The Initial Developer of the Original Code is
   - Cail Lomecb <cail@nm.ru>.
   - Portions created by the Initial Developer are Copyright (C) 1999-2003
   - the Initial Developer. All Rights Reserved.
   -
   - Contributor(s):
   - Eugene Efremov <4mirror@mail.ru>:
   - Timur Safin <timur@lanit.ru>
   - Vladimir Tarasov <tsoftgroup@chat.ru>
   -
   - Alternatively, the contents of this file may be used under the terms of
   - either the GNU General Public License Version 2 or later (the "GPL"), or
   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
   - in which case the provisions of the GPL or the LGPL are applicable instead
   - of those above. If you wish to allow use of your version of this file only
   - under the terms of either the GPL or the LGPL, and not to allow others to
   - use your version of this file under the terms of the MPL, indicate your
   - decision by deleting the provisions above and replace them with the notice
   - and other provisions required by the LGPL or the GPL. If you do not delete
   - the provisions above, a recipient may use your version of this file under
   - the terms of any one of the MPL, the GPL or the LGPL.
   -
   - ***** END LICENSE BLOCK ***** -->