regex: updated snip4.cpp (fixed patholgical expressions).

[SVN r8366]
This commit is contained in:
John Maddock
2000-11-30 12:05:15 +00:00
parent 91953b9cf2
commit 2b0fc3c3a8
3 changed files with 40 additions and 31 deletions

View File

@ -1,3 +1,11 @@
FIXED: Pathological regular expressions in snip4.cpp and in docs.
FIXED: Missing std:: prefixes in some headers.
Version 302:
FIXED: STLPort debug problems.
FIXED: Compatibility with updated Dinkum libraries and VC6.
ADDED: Tentative support for partial matches (not yet documented).
Version 301: Version 301:
First boost release version, First boost release version,
CHANGED: reg_match to match_results CHANGED: reg_match to match_results
@ -209,5 +217,6 @@ BUG: character sets don't function correctly when regbase::char_classes

View File

@ -88,14 +88,14 @@ extern const char* pre_format = "(?1<)(?2>)";
const char* expression_text = // preprocessor directives: index 1 const char* expression_text = // preprocessor directives: index 1
"(^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*)|" "(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|"
// comment: index 3 // comment: index 2
"(//[^\\n]*|/\\*([^*]|\\*+[^*/])*\\*+/)|" "(//[^\\n]*|/\\*.*?\\*/)|"
// literals: index 5 // literals: index 3
"\\<([+-]?((0x[[:xdigit:]]+)|(([[:digit:]]*\\.)?[[:digit:]]+([eE][+-]?[[:digit:]]+)?))u?((int(8|16|32|64))|L)?)\\>|" "\\<([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\>|"
// string literals: index 14 // string literals: index 4
"('([^\\\\']|\\\\.)*'|\"([^\\\\\"]|\\\\.)*\")|" "('(?:[^\\\\']|\\\\.)*'|\"(?:[^\\\\\"]|\\\\.)*\")|"
// keywords: index 17 // keywords: index 5
"\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import" "\\<(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import"
"|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall" "|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall"
"|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool" "|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool"
@ -108,16 +108,16 @@ const char* expression_text = // preprocessor directives: index 1
; ;
const char* format_string = "(?1<font color=\"#008040\">$&</font>)" const char* format_string = "(?1<font color=\"#008040\">$&</font>)"
"(?3<I><font color=\"#000080\">$&</font></I>)" "(?2<I><font color=\"#000080\">$&</font></I>)"
"(?5<font color=\"#0000A0\">$&</font>)" "(?3<font color=\"#0000A0\">$&</font>)"
"(?14<font color=\"#0000FF\">$&</font>)" "(?4<font color=\"#0000FF\">$&</font>)"
"(?17<B>$&</B>)"; "(?5<B>$&</B>)";
const char* header_text = "<HTML>\n<HEAD>\n" const char* header_text = "<HTML>\n<HEAD>\n"
"<TITLE>Auto-generated html formated source</TITLE>\n" "<TITLE>Auto-generated html formated source</TITLE>\n"
"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n" "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=windows-1252\">\n"
"</HEAD>\n" "</HEAD>\n"
"<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffff99\">\n" "<BODY LINK=\"#0000ff\" VLINK=\"#800080\" BGCOLOR=\"#ffffff\">\n"
"<P> </P>\n<PRE>"; "<P> </P>\n<PRE>";
const char* footer_text = "</PRE>\n</BODY>\n\n"; const char* footer_text = "</PRE>\n</BODY>\n\n";

View File

@ -2053,7 +2053,7 @@ follows: <br>
takes C/C++ source code as input, and outputs syntax highlighted takes C/C++ source code as input, and outputs syntax highlighted
HTML code. </p> HTML code. </p>
<pre><font color="#008040">#include &lt;iostream&gt;</font> <pre>
<font color="#008040">#include &lt;fstream&gt;</font> <font color="#008040">#include &lt;fstream&gt;</font>
<font color="#008040">#include &lt;sstream&gt;</font> <font color="#008040">#include &lt;sstream&gt;</font>
<font color="#008040">#include &lt;string&gt;</font> <font color="#008040">#include &lt;string&gt;</font>
@ -2082,8 +2082,8 @@ boost::regex e1, e2;
<b>while</b>(is.get(c)) <b>while</b>(is.get(c))
{ {
<b>if</b>(s.capacity() == s.size()) <b>if</b>(s.capacity() == s.size())
s.reserve(s.capacity() * <font color="#000080">3</font>); s.reserve(s.capacity() * <font color="#0000A0">3</font>);
s.append(<font color="#000080">1</font>, c); s.append(<font color="#0000A0">1</font>, c);
} }
} }
@ -2105,12 +2105,12 @@ color="#0000FF">&quot;.htm&quot;</font>));
<font color="#000080"><i>// temporary string stream</i></font> <font color="#000080"><i>// temporary string stream</i></font>
std::ostringstream t(std::ios::out | std::ios::binary); std::ostringstream t(std::ios::out | std::ios::binary);
std::ostream_iterator&lt;<b>char</b>, <b>char</b>&gt; oi(t); std::ostream_iterator&lt;<b>char</b>, <b>char</b>&gt; oi(t);
regex_merge(oi, in.begin(), in.end(), e2, pre_format); boost::regex_merge(oi, in.begin(), in.end(), e2, pre_format);
<font color="#000080"><i>// then output to final output stream</i></font> <font color="#000080"><i>// then output to final output stream</i></font>
<font color="#000080"><i>// adding syntax highlighting:</i></font> <font color="#000080"><i>// adding syntax highlighting:</i></font>
std::string s(t.str()); std::string s(t.str());
std::ostream_iterator&lt;<b>char</b>, <b>char</b>&gt; out(os); std::ostream_iterator&lt;<b>char</b>, <b>char</b>&gt; out(os);
regex_merge(out, s.begin(), s.end(), e1, format_string); boost::regex_merge(out, s.begin(), s.end(), e1, format_string);
os &lt;&lt; footer_text; os &lt;&lt; footer_text;
} }
<b>return</b> <font color="#0000A0">0</font>; <b>return</b> <font color="#0000A0">0</font>;
@ -2123,14 +2123,14 @@ color="#0000FF">&quot;(?1&lt;)(?2&gt;)&quot;</font>;
<b>const</b> <b>char</b>* expression_text = <font color="#000080"><i>// preprocessor directives: index 1</i></font> <b>const</b> <b>char</b>* expression_text = <font color="#000080"><i>// preprocessor directives: index 1</i></font>
<font color="#0000FF">&quot;(^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*)|&quot;</font> <font color="#0000FF">&quot;(^[[:blank:]]*#(?:[^\\\\\\n]|\\\\[^\\n[:punct:][:word:]]*[\\n[:punct:][:word:]])*)|&quot;</font>
<font color="#000080"><i>// comment: index 3</i></font> <font color="#000080"><i>// comment: index 2</i></font>
<font color="#0000FF">&quot;(//[^\\n]*|/\\*([^*]|\\*+[^*/])*\\*+/)|&quot;</font> <font color="#0000FF">&quot;(//[^\\n]*|/\\*.*?\\*/)|&quot;</font>
<font color="#000080"><i>// literals: index 5</i></font> <font color="#000080"><i>// literals: index 3</i></font>
<font color="#0000FF">&quot;\\&lt;([+-]?((0x[[:xdigit:]]+)|(([[:digit:]]*\\.)?[[:digit:]]+([eE][+-]?[[:digit:]]+)?))u?((int(8|16|32|64))|L)?)\\&gt;|&quot;</font> <font color="#0000FF">&quot;\\&lt;([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(?:8|16|32|64))|L)?)\\&gt;|&quot;</font>
<font color="#000080"><i>// string literals: index 14</i></font> <font color="#000080"><i>// string literals: index 4</i></font>
<font color="#0000FF">&quot;('([^\\\\']|\\\\.)*'|\&quot;([^\\\\\&quot;]|\\\\.)*\&quot;)|&quot;</font> <font color="#0000FF">&quot;('(?:[^\\\\']|\\\\.)*'|\&quot;(?:[^\\\\\&quot;]|\\\\.)*\&quot;)|&quot;</font>
<font color="#000080"><i>// keywords: index 17</i></font> <font color="#000080"><i>// keywords: index 5</i></font>
<font color="#0000FF">&quot;\\&lt;(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import&quot;</font> <font color="#0000FF">&quot;\\&lt;(__asm|__cdecl|__declspec|__export|__far16|__fastcall|__fortran|__import&quot;</font>
<font color="#0000FF">&quot;|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall&quot;</font> <font color="#0000FF">&quot;|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_fastcall&quot;</font>
<font color="#0000FF">&quot;|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool&quot;</font> <font color="#0000FF">&quot;|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool&quot;</font>
@ -2143,16 +2143,16 @@ color="#0000FF">&quot;(?1&lt;)(?2&gt;)&quot;</font>;
; ;
<b>const</b> <b>char</b>* format_string = <font color="#0000FF">&quot;(?1&lt;font color=\&quot;#008040\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font> <b>const</b> <b>char</b>* format_string = <font color="#0000FF">&quot;(?1&lt;font color=\&quot;#008040\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font>
<font color="#0000FF">&quot;(?3&lt;I&gt;&lt;font color=\&quot;#000080\&quot;&gt;$&amp;&lt;/font&gt;&lt;/I&gt;)&quot;</font> <font color="#0000FF">&quot;(?2&lt;I&gt;&lt;font color=\&quot;#000080\&quot;&gt;$&amp;&lt;/font&gt;&lt;/I&gt;)&quot;</font>
<font color="#0000FF">&quot;(?5&lt;font color=\&quot;#0000A0\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font> <font color="#0000FF">&quot;(?3&lt;font color=\&quot;#0000A0\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font>
<font color="#0000FF">&quot;(?14&lt;font color=\&quot;#0000FF\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font> <font color="#0000FF">&quot;(?4&lt;font color=\&quot;#0000FF\&quot;&gt;$&amp;&lt;/font&gt;)&quot;</font>
<font color="#0000FF">&quot;(?17&lt;B&gt;$&amp;&lt;/B&gt;)&quot;</font>; <font color="#0000FF">&quot;(?5&lt;B&gt;$&amp;&lt;/B&gt;)&quot;</font>;
<b>const</b> <b>char</b>* header_text = <font color="#0000FF">&quot;&lt;HTML&gt;\n&lt;HEAD&gt;\n&quot;</font> <b>const</b> <b>char</b>* header_text = <font color="#0000FF">&quot;&lt;HTML&gt;\n&lt;HEAD&gt;\n&quot;</font>
<font color="#0000FF">&quot;&lt;TITLE&gt;Auto-generated html formated source&lt;/TITLE&gt;\n&quot;</font> <font color="#0000FF">&quot;&lt;TITLE&gt;Auto-generated html formated source&lt;/TITLE&gt;\n&quot;</font>
<font color="#0000FF">&quot;&lt;META HTTP-EQUIV=\&quot;Content-Type\&quot; CONTENT=\&quot;text/html; charset=windows-1252\&quot;&gt;\n&quot;</font> <font color="#0000FF">&quot;&lt;META HTTP-EQUIV=\&quot;Content-Type\&quot; CONTENT=\&quot;text/html; charset=windows-1252\&quot;&gt;\n&quot;</font>
<font color="#0000FF">&quot;&lt;/HEAD&gt;\n&quot;</font> <font color="#0000FF">&quot;&lt;/HEAD&gt;\n&quot;</font>
<font color="#0000FF">&quot;&lt;BODY LINK=\&quot;#0000ff\&quot; VLINK=\&quot;#800080\&quot; BGCOLOR=\&quot;#ffff99\&quot;&gt;\n&quot;</font> <font color="#0000FF">&quot;&lt;BODY LINK=\&quot;#0000ff\&quot; VLINK=\&quot;#800080\&quot; BGCOLOR=\&quot;#ffffff\&quot;&gt;\n&quot;</font>
<font color="#0000FF">&quot;&lt;P&gt; &lt;/P&gt;\n&lt;PRE&gt;&quot;</font>; <font color="#0000FF">&quot;&lt;P&gt; &lt;/P&gt;\n&lt;PRE&gt;&quot;</font>;
<b>const</b> <b>char</b>* footer_text = <font color="#0000FF">&quot;&lt;/PRE&gt;\n&lt;/BODY&gt;\n\n&quot;</font>; <b>const</b> <b>char</b>* footer_text = <font color="#0000FF">&quot;&lt;/PRE&gt;\n&lt;/BODY&gt;\n\n&quot;</font>;