summaryrefslogtreecommitdiffstats
path: root/third_party/re2/doc
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-31 14:26:22 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-31 14:26:22 +0000
commit847647ad699251a369034056579d48e8201214d3 (patch)
tree36f0edfa42b442c4b528eaaba8bfe8d5400f4328 /third_party/re2/doc
parent82b994f1239327fd7b51fc9b288d6040e0456052 (diff)
downloadchromium_src-847647ad699251a369034056579d48e8201214d3.zip
chromium_src-847647ad699251a369034056579d48e8201214d3.tar.gz
chromium_src-847647ad699251a369034056579d48e8201214d3.tar.bz2
Include RE2 library
BUG=112155 TEST=no TBR=ben@chromium.org Review URL: https://chromiumcodereview.appspot.com/10575037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149180 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/re2/doc')
-rw-r--r--third_party/re2/doc/README.xkcd1
-rwxr-xr-xthird_party/re2/doc/mksyntaxhtml42
-rwxr-xr-xthird_party/re2/doc/mksyntaxwiki36
-rw-r--r--third_party/re2/doc/syntax.html388
-rw-r--r--third_party/re2/doc/syntax.txt373
-rw-r--r--third_party/re2/doc/xkcd.pngbin0 -> 26496 bytes
6 files changed, 840 insertions, 0 deletions
diff --git a/third_party/re2/doc/README.xkcd b/third_party/re2/doc/README.xkcd
new file mode 100644
index 0000000..b50a579
--- /dev/null
+++ b/third_party/re2/doc/README.xkcd
@@ -0,0 +1 @@
+xkcd.png is a cropped version of http://xkcd.com/208/
diff --git a/third_party/re2/doc/mksyntaxhtml b/third_party/re2/doc/mksyntaxhtml
new file mode 100755
index 0000000..0292ea0
--- /dev/null
+++ b/third_party/re2/doc/mksyntaxhtml
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+cp syntax.txt syntax.html
+sam -d syntax.html <<'!'
+,s/\&/\&amp;/g
+,s/</\&lt;/g
+,s/>/\&gt;/g
+,s!== (([^()]|\([^()]*\))*)!≡ <code>\1</code>!g
+,s!«!<code>!g
+,s!»!</code>!g
+,s! vim$! <font size=-2>VIM</font>!g
+,s! pcre$! <font size=-2>PCRE</font>!g
+,s! perl$! <font size=-2>PERL</font>!g
+,x g/NOT SUPPORTED/ s!^[^ ]+!<font color=#808080>&</font>!
+,s!NOT SUPPORTED!!g
+,s!(^[^ ]+) (.*)\n!<tr><td><code>\1</code></td><td>\2</td></tr>\n!g
+,s!.*:$!<b>&</b>!g
+,s!^$!<tr><td></td></tr>!g
+,x v/<tr>/ s!.*!<tr><td colspan=2>&</td></tr>!
+1,2c
+<html>
+<!-- AUTOMATICALLY GENERATED by mksyntaxhtml -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>RE2 regular expression syntax reference</title>
+</head>
+<body>
+<h1>RE2 regular expression syntax reference</h1>
+
+<table border=0 cellpadding=2 cellspacing=2>
+<tr><td colspan=2>This page lists the regular expression syntax accepted by RE2.</td></tr>
+<tr><td colspan=2>It also lists syntax accepted by PCRE, PERL, and VIM.</td></tr>
+<tr><td colspan=2>Grayed out expressions are not supported by RE2.</td></tr>
+.
+$a
+</table>
+</body>
+</html>
+.
+w
+q
+!
diff --git a/third_party/re2/doc/mksyntaxwiki b/third_party/re2/doc/mksyntaxwiki
new file mode 100755
index 0000000..930b389
--- /dev/null
+++ b/third_party/re2/doc/mksyntaxwiki
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+cp syntax.txt syntax.wiki
+sam -d syntax.wiki <<'!'
+,s!`!`````!g
+,s!== (([^()]|\([^()]*\))*)!≡ `\1`!g
+,s!«!`!g
+,s!»!`!g
+,s! vim$! <font size="1">VIM</font>!g
+,s! pcre$! <font size="1">PCRE</font>!g
+,s! perl$! <font size="1">PERL</font>!g
+,s!(^[^ ]+) (.*)\n!`\1` \2\n!g
+,x g/NOT SUPPORTED/ s!^[^ ]+!<font color="#808080">&</font>!
+,s!NOT SUPPORTED!<font size="1">(&)</font>!g
+,s!(^[^ ]+) (.*)\n!<tr><td>\1</td><td>\2</td></tr>\n!g
+,s!.*:$!<b>&</b>!g
+,s!^$!<tr><td></td></tr>!g
+,x v/<tr>/ s!.*!<tr><td colspan="2">&</td></tr>!
+1,2c
+#summary I define UNIX as “30 definitions of regular expressions living under one roof.” —Don Knuth
+
+<wiki:comment>
+GENERATED BY mksyntaxwiki. DO NOT EDIT
+</wiki:comment>
+
+<table border="0" cellpadding="2" cellspacing="2">
+<tr><td colspan="2">This page lists the regular expression syntax accepted by RE2.</td></tr>
+<tr><td colspan="2">It also lists syntax accepted by PCRE, PERL, and VIM.</td></tr>
+<tr><td colspan="2">Grayed out expressions are not supported by RE2.</td></tr>
+.
+$a
+</table>
+.
+w
+q
+!
diff --git a/third_party/re2/doc/syntax.html b/third_party/re2/doc/syntax.html
new file mode 100644
index 0000000..7f5e15a
--- /dev/null
+++ b/third_party/re2/doc/syntax.html
@@ -0,0 +1,388 @@
+<html>
+<!-- AUTOMATICALLY GENERATED by mksyntaxhtml -->
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<title>RE2 regular expression syntax reference</title>
+</head>
+<body>
+<h1>RE2 regular expression syntax reference</h1>
+
+<table border=0 cellpadding=2 cellspacing=2>
+<tr><td colspan=2>This page lists the regular expression syntax accepted by RE2.</td></tr>
+<tr><td colspan=2>It also lists syntax accepted by PCRE, PERL, and VIM.</td></tr>
+<tr><td colspan=2>Grayed out expressions are not supported by RE2.</td></tr>
+<tr><td colspan=2>See <a href="http://go/re2">http://go/re2</a> and <a href="http://go/re2quick">http://go/re2quick</a>.</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Single characters:</b></td></tr>
+<tr><td><code>.</code></td><td>any character, including newline (s=true)</td></tr>
+<tr><td><code>[xyz]</code></td><td>character class</td></tr>
+<tr><td><code>[^xyz]</code></td><td>negated character class</td></tr>
+<tr><td><code>\d</code></td><td>Perl character class</td></tr>
+<tr><td><code>\D</code></td><td>negated Perl character class</td></tr>
+<tr><td><code>[:alpha:]</code></td><td>ASCII character class</td></tr>
+<tr><td><code>[:^alpha:]</code></td><td>negated ASCII character class</td></tr>
+<tr><td><code>\pN</code></td><td>Unicode character class (one-letter name)</td></tr>
+<tr><td><code>\p{Greek}</code></td><td>Unicode character class</td></tr>
+<tr><td><code>\PN</code></td><td>negated Unicode character class (one-letter name)</td></tr>
+<tr><td><code>\P{Greek}</code></td><td>negated Unicode character class</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Composites:</b></td></tr>
+<tr><td><code>xy</code></td><td><code>x</code> followed by <code>y</code></td></tr>
+<tr><td><code>x|y</code></td><td><code>x</code> or <code>y</code> (prefer <code>x</code>)</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Repetitions:</b></td></tr>
+<tr><td><code>x*</code></td><td>zero or more <code>x</code>, prefer more</td></tr>
+<tr><td><code>x+</code></td><td>one or more <code>x</code>, prefer more</td></tr>
+<tr><td><code>x?</code></td><td>zero or one <code>x</code>, prefer one</td></tr>
+<tr><td><code>x{n,m}</code></td><td><code>n</code> or <code>n</code>+1 or ... or <code>m</code> <code>x</code>, prefer more</td></tr>
+<tr><td><code>x{n,}</code></td><td><code>n</code> or more <code>x</code>, prefer more</td></tr>
+<tr><td><code>x{n}</code></td><td>exactly <code>n</code> <code>x</code></td></tr>
+<tr><td><code>x*?</code></td><td>zero or more <code>x</code>, prefer fewer</td></tr>
+<tr><td><code>x+?</code></td><td>one or more <code>x</code>, prefer fewer</td></tr>
+<tr><td><code>x??</code></td><td>zero or one <code>x</code>, prefer zero</td></tr>
+<tr><td><code>x{n,m}?</code></td><td><code>n</code> or <code>n</code>+1 or ... or <code>m</code> <code>x</code>, prefer fewer</td></tr>
+<tr><td><code>x{n,}?</code></td><td><code>n</code> or more <code>x</code>, prefer fewer</td></tr>
+<tr><td><code>x{n}?</code></td><td>exactly <code>n</code> <code>x</code></td></tr>
+<tr><td><code><font color=#808080>x{}</font></code></td><td>(≡ <code>x*</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>x{-}</font></code></td><td>(≡ <code>x*?</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>x{-n}</font></code></td><td>(≡ <code>x{n}?</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>x=</font></code></td><td>(≡ <code>x?</code>) <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Possessive repetitions:</b></td></tr>
+<tr><td><code><font color=#808080>x*+</font></code></td><td>zero or more <code>x</code>, possessive </td></tr>
+<tr><td><code><font color=#808080>x++</font></code></td><td>one or more <code>x</code>, possessive </td></tr>
+<tr><td><code><font color=#808080>x?+</font></code></td><td>zero or one <code>x</code>, possessive </td></tr>
+<tr><td><code><font color=#808080>x{n,m}+</font></code></td><td><code>n</code> or ... or <code>m</code> <code>x</code>, possessive </td></tr>
+<tr><td><code><font color=#808080>x{n,}+</font></code></td><td><code>n</code> or more <code>x</code>, possessive </td></tr>
+<tr><td><code><font color=#808080>x{n}+</font></code></td><td>exactly <code>n</code> <code>x</code>, possessive </td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Grouping:</b></td></tr>
+<tr><td><code>(re)</code></td><td>numbered capturing group</td></tr>
+<tr><td><code>(?P&lt;name&gt;re)</code></td><td>named &amp; numbered capturing group</td></tr>
+<tr><td><code><font color=#808080>(?&lt;name&gt;re)</font></code></td><td>named &amp; numbered capturing group </td></tr>
+<tr><td><code><font color=#808080>(?'name're)</font></code></td><td>named &amp; numbered capturing group </td></tr>
+<tr><td><code>(?:re)</code></td><td>non-capturing group</td></tr>
+<tr><td><code>(?flags)</code></td><td>set flags until outer paren closes; non-capturing</td></tr>
+<tr><td><code>(?flags:re)</code></td><td>set flags during re; non-capturing</td></tr>
+<tr><td><code><font color=#808080>(?#text)</font></code></td><td>comment </td></tr>
+<tr><td><code><font color=#808080>(?|x|y|z)</font></code></td><td>branch numbering reset </td></tr>
+<tr><td><code><font color=#808080>(?&gt;re)</font></code></td><td>possessive match of <code>re</code> </td></tr>
+<tr><td><code><font color=#808080>re@&gt;</font></code></td><td>possessive match of <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>%(re)</font></code></td><td>non-capturing group <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Flags:</b></td></tr>
+<tr><td><code>i</code></td><td>case-insensitive (default false)</td></tr>
+<tr><td><code>m</code></td><td>multi-line mode (default false)</td></tr>
+<tr><td><code>s</code></td><td>let <code>.</code> match <code>\n</code> (default false)</td></tr>
+<tr><td><code>U</code></td><td>ungreedy: swap meaning of <code>x*</code> and <code>x*?</code>, <code>x+</code> and <code>x+?</code>, etc (default false)</td></tr>
+<tr><td colspan=2>Flag syntax is <code>xyz</code> (set) or <code>-xyz</code> (clear) or <code>xy-z</code> (set <code>xy</code>, clear <code>z</code>).</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Empty strings:</b></td></tr>
+<tr><td><code>^</code></td><td>at beginning of text or line (<code>m</code>=true)</td></tr>
+<tr><td><code>$</code></td><td>at end of text or line (<code>m</code>=true)</td></tr>
+<tr><td><code>\A</code></td><td>at beginning of text</td></tr>
+<tr><td><code>\b</code></td><td>at word boundary (<code>\w</code> to left and <code>\W</code> to right or vice versa)</td></tr>
+<tr><td><code>\B</code></td><td>not a word boundary</td></tr>
+<tr><td><code><font color=#808080>\G</font></code></td><td>at beginning of subtext being searched <font size=-2>PCRE</font></td></tr>
+<tr><td><code><font color=#808080>\G</font></code></td><td>at end of last match <font size=-2>PERL</font></td></tr>
+<tr><td><code><font color=#808080>\Z</font></code></td><td>at end of text, or before newline at end of text </td></tr>
+<tr><td><code>\z</code></td><td>at end of text</td></tr>
+<tr><td><code><font color=#808080>(?=re)</font></code></td><td>before text matching <code>re</code> </td></tr>
+<tr><td><code><font color=#808080>(?!re)</font></code></td><td>before text not matching <code>re</code> </td></tr>
+<tr><td><code><font color=#808080>(?&lt;=re)</font></code></td><td>after text matching <code>re</code> </td></tr>
+<tr><td><code><font color=#808080>(?&lt;!re)</font></code></td><td>after text not matching <code>re</code> </td></tr>
+<tr><td><code><font color=#808080>re&amp;</font></code></td><td>before text matching <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>re@=</font></code></td><td>before text matching <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>re@!</font></code></td><td>before text not matching <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>re@&lt;=</font></code></td><td>after text matching <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>re@&lt;!</font></code></td><td>after text not matching <code>re</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\zs</font></code></td><td>sets start of match (= \K) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\ze</font></code></td><td>sets end of match <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%^</font></code></td><td>beginning of file <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%$</font></code></td><td>end of file <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%V</font></code></td><td>on screen <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%#</font></code></td><td>cursor position <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%'m</font></code></td><td>mark <code>m</code> position <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%23l</font></code></td><td>in line 23 <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%23c</font></code></td><td>in column 23 <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%23v</font></code></td><td>in virtual column 23 <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Escape sequences:</b></td></tr>
+<tr><td><code>\a</code></td><td>bell (≡ <code>\007</code>)</td></tr>
+<tr><td><code>\f</code></td><td>form feed (≡ <code>\014</code>)</td></tr>
+<tr><td><code>\t</code></td><td>horizontal tab (≡ <code>\011</code>)</td></tr>
+<tr><td><code>\n</code></td><td>newline (≡ <code>\012</code>)</td></tr>
+<tr><td><code>\r</code></td><td>carriage return (≡ <code>\015</code>)</td></tr>
+<tr><td><code>\v</code></td><td>vertical tab character (≡ <code>\013</code>)</td></tr>
+<tr><td><code>\*</code></td><td>literal <code>*</code>, for any punctuation character <code>*</code></td></tr>
+<tr><td><code>\123</code></td><td>octal character code (up to three digits)</td></tr>
+<tr><td><code>\x7F</code></td><td>hex character code (exactly two digits)</td></tr>
+<tr><td><code>\x{10FFFF}</code></td><td>hex character code</td></tr>
+<tr><td><code>\C</code></td><td>match a single byte even in UTF-8 mode</td></tr>
+<tr><td><code>\Q...\E</code></td><td>literal text <code>...</code> even if <code>...</code> has punctuation</td></tr>
+<tr><td></td></tr>
+<tr><td><code><font color=#808080>\1</font></code></td><td>backreference </td></tr>
+<tr><td><code><font color=#808080>\b</font></code></td><td>backspace (use <code>\010</code>)</td></tr>
+<tr><td><code><font color=#808080>\cK</font></code></td><td>control char ^K (use <code>\001</code> etc)</td></tr>
+<tr><td><code><font color=#808080>\e</font></code></td><td>escape (use <code>\033</code>)</td></tr>
+<tr><td><code><font color=#808080>\g1</font></code></td><td>backreference </td></tr>
+<tr><td><code><font color=#808080>\g{1}</font></code></td><td>backreference </td></tr>
+<tr><td><code><font color=#808080>\g{+1}</font></code></td><td>backreference </td></tr>
+<tr><td><code><font color=#808080>\g{-1}</font></code></td><td>backreference </td></tr>
+<tr><td><code><font color=#808080>\g{name}</font></code></td><td>named backreference </td></tr>
+<tr><td><code><font color=#808080>\g&lt;name&gt;</font></code></td><td>subroutine call </td></tr>
+<tr><td><code><font color=#808080>\g'name'</font></code></td><td>subroutine call </td></tr>
+<tr><td><code><font color=#808080>\k&lt;name&gt;</font></code></td><td>named backreference </td></tr>
+<tr><td><code><font color=#808080>\k'name'</font></code></td><td>named backreference </td></tr>
+<tr><td><code><font color=#808080>\lX</font></code></td><td>lowercase <code>X</code> </td></tr>
+<tr><td><code><font color=#808080>\ux</font></code></td><td>uppercase <code>x</code> </td></tr>
+<tr><td><code><font color=#808080>\L...\E</font></code></td><td>lowercase text <code>...</code> </td></tr>
+<tr><td><code><font color=#808080>\K</font></code></td><td>reset beginning of <code>$0</code> </td></tr>
+<tr><td><code><font color=#808080>\N{name}</font></code></td><td>named Unicode character </td></tr>
+<tr><td><code><font color=#808080>\R</font></code></td><td>line break </td></tr>
+<tr><td><code><font color=#808080>\U...\E</font></code></td><td>upper case text <code>...</code> </td></tr>
+<tr><td><code><font color=#808080>\X</font></code></td><td>extended Unicode sequence </td></tr>
+<tr><td></td></tr>
+<tr><td><code><font color=#808080>\%d123</font></code></td><td>decimal character 123 <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%xFF</font></code></td><td>hex character FF <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%o123</font></code></td><td>octal character 123 <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%u1234</font></code></td><td>Unicode character 0x1234 <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\%U12345678</font></code></td><td>Unicode character 0x12345678 <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Character class elements:</b></td></tr>
+<tr><td><code>x</code></td><td>single character</td></tr>
+<tr><td><code>A-Z</code></td><td>character range (inclusive)</td></tr>
+<tr><td><code>\d</code></td><td>Perl character class</td></tr>
+<tr><td><code>[:foo:]</code></td><td>ASCII character class <code>foo</code></td></tr>
+<tr><td><code>\p{Foo}</code></td><td>Unicode character class <code>Foo</code></td></tr>
+<tr><td><code>\pF</code></td><td>Unicode character class <code>F</code> (one-letter name)</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Named character classes as character class elements:</b></td></tr>
+<tr><td><code>[\d]</code></td><td>digits (≡ <code>\d</code>)</td></tr>
+<tr><td><code>[^\d]</code></td><td>not digits (≡ <code>\D</code>)</td></tr>
+<tr><td><code>[\D]</code></td><td>not digits (≡ <code>\D</code>)</td></tr>
+<tr><td><code>[^\D]</code></td><td>not not digits (≡ <code>\d</code>)</td></tr>
+<tr><td><code>[[:name:]]</code></td><td>named ASCII class inside character class (≡ <code>[:name:]</code>)</td></tr>
+<tr><td><code>[^[:name:]]</code></td><td>named ASCII class inside negated character class (≡ <code>[:^name:]</code>)</td></tr>
+<tr><td><code>[\p{Name}]</code></td><td>named Unicode property inside character class (≡ <code>\p{Name}</code>)</td></tr>
+<tr><td><code>[^\p{Name}]</code></td><td>named Unicode property inside negated character class (≡ <code>\P{Name}</code>)</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Perl character classes:</b></td></tr>
+<tr><td><code>\d</code></td><td>digits (≡ <code>[0-9]</code>)</td></tr>
+<tr><td><code>\D</code></td><td>not digits (≡ <code>[^0-9]</code>)</td></tr>
+<tr><td><code>\s</code></td><td>whitespace (≡ <code>[\t\n\f\r ]</code>)</td></tr>
+<tr><td><code>\S</code></td><td>not whitespace (≡ <code>[^\t\n\f\r ]</code>)</td></tr>
+<tr><td><code>\w</code></td><td>word characters (≡ <code>[0-9A-Za-z_]</code>)</td></tr>
+<tr><td><code>\W</code></td><td>not word characters (≡ <code>[^0-9A-Za-z_]</code>)</td></tr>
+<tr><td></td></tr>
+<tr><td><code><font color=#808080>\h</font></code></td><td>horizontal space </td></tr>
+<tr><td><code><font color=#808080>\H</font></code></td><td>not horizontal space </td></tr>
+<tr><td><code><font color=#808080>\v</font></code></td><td>vertical space </td></tr>
+<tr><td><code><font color=#808080>\V</font></code></td><td>not vertical space </td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>ASCII character classes:</b></td></tr>
+<tr><td><code>[:alnum:]</code></td><td>alphanumeric (≡ <code>[0-9A-Za-z]</code>)</td></tr>
+<tr><td><code>[:alpha:]</code></td><td>alphabetic (≡ <code>[A-Za-z]</code>)</td></tr>
+<tr><td><code>[:ascii:]</code></td><td>ASCII (≡ <code>[\x00-\x7F]</code>)</td></tr>
+<tr><td><code>[:blank:]</code></td><td>blank (≡ <code>[\t ]</code>)</td></tr>
+<tr><td><code>[:cntrl:]</code></td><td>control (≡ <code>[\x00-\x1F\x7F]</code>)</td></tr>
+<tr><td><code>[:digit:]</code></td><td>digits (≡ <code>[0-9]</code>)</td></tr>
+<tr><td><code>[:graph:]</code></td><td>graphical (≡ <code>[!-~] == [A-Za-z0-9!"#$%&amp;'()*+,\-./:;&lt;=&gt;?@[\\\]^_`{|}~]</code>)</td></tr>
+<tr><td><code>[:lower:]</code></td><td>lower case (≡ <code>[a-z]</code>)</td></tr>
+<tr><td><code>[:print:]</code></td><td>printable (≡ <code>[ -~] == [ [:graph:]]</code>)</td></tr>
+<tr><td><code>[:punct:]</code></td><td>punctuation (≡ <code>[!-/:-@[-`{-~]</code>)</td></tr>
+<tr><td><code>[:space:]</code></td><td>whitespace (≡ <code>[\t\n\v\f\r ]</code>)</td></tr>
+<tr><td><code>[:upper:]</code></td><td>upper case (≡ <code>[A-Z]</code>)</td></tr>
+<tr><td><code>[:word:]</code></td><td>word characters (≡ <code>[0-9A-Za-z_]</code>)</td></tr>
+<tr><td><code>[:xdigit:]</code></td><td>hex digit (≡ <code>[0-9A-Fa-f]</code>)</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Unicode character class names--general category:</b></td></tr>
+<tr><td><code>C</code></td><td>other</td></tr>
+<tr><td><code>Cc</code></td><td>control</td></tr>
+<tr><td><code>Cf</code></td><td>format</td></tr>
+<tr><td><code><font color=#808080>Cn</font></code></td><td>unassigned code points </td></tr>
+<tr><td><code>Co</code></td><td>private use</td></tr>
+<tr><td><code>Cs</code></td><td>surrogate</td></tr>
+<tr><td><code>L</code></td><td>letter</td></tr>
+<tr><td><code><font color=#808080>LC</font></code></td><td>cased letter </td></tr>
+<tr><td><code><font color=#808080>L&amp;</font></code></td><td>cased letter </td></tr>
+<tr><td><code>Ll</code></td><td>lowercase letter</td></tr>
+<tr><td><code>Lm</code></td><td>modifier letter</td></tr>
+<tr><td><code>Lo</code></td><td>other letter</td></tr>
+<tr><td><code>Lt</code></td><td>titlecase letter</td></tr>
+<tr><td><code>Lu</code></td><td>uppercase letter</td></tr>
+<tr><td><code>M</code></td><td>mark</td></tr>
+<tr><td><code>Mc</code></td><td>spacing mark</td></tr>
+<tr><td><code>Me</code></td><td>enclosing mark</td></tr>
+<tr><td><code>Mn</code></td><td>non-spacing mark</td></tr>
+<tr><td><code>N</code></td><td>number</td></tr>
+<tr><td><code>Nd</code></td><td>decimal number</td></tr>
+<tr><td><code>Nl</code></td><td>letter number</td></tr>
+<tr><td><code>No</code></td><td>other number</td></tr>
+<tr><td><code>P</code></td><td>punctuation</td></tr>
+<tr><td><code>Pc</code></td><td>connector punctuation</td></tr>
+<tr><td><code>Pd</code></td><td>dash punctuation</td></tr>
+<tr><td><code>Pe</code></td><td>close punctuation</td></tr>
+<tr><td><code>Pf</code></td><td>final punctuation</td></tr>
+<tr><td><code>Pi</code></td><td>initial punctuation</td></tr>
+<tr><td><code>Po</code></td><td>other punctuation</td></tr>
+<tr><td><code>Ps</code></td><td>open punctuation</td></tr>
+<tr><td><code>S</code></td><td>symbol</td></tr>
+<tr><td><code>Sc</code></td><td>currency symbol</td></tr>
+<tr><td><code>Sk</code></td><td>modifier symbol</td></tr>
+<tr><td><code>Sm</code></td><td>math symbol</td></tr>
+<tr><td><code>So</code></td><td>other symbol</td></tr>
+<tr><td><code>Z</code></td><td>separator</td></tr>
+<tr><td><code>Zl</code></td><td>line separator</td></tr>
+<tr><td><code>Zp</code></td><td>paragraph separator</td></tr>
+<tr><td><code>Zs</code></td><td>space separator</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Unicode character class names--scripts:</b></td></tr>
+<tr><td><code>Arabic</code></td><td>Arabic</td></tr>
+<tr><td><code>Armenian</code></td><td>Armenian</td></tr>
+<tr><td><code>Balinese</code></td><td>Balinese</td></tr>
+<tr><td><code>Bengali</code></td><td>Bengali</td></tr>
+<tr><td><code>Bopomofo</code></td><td>Bopomofo</td></tr>
+<tr><td><code>Braille</code></td><td>Braille</td></tr>
+<tr><td><code>Buginese</code></td><td>Buginese</td></tr>
+<tr><td><code>Buhid</code></td><td>Buhid</td></tr>
+<tr><td><code>Canadian_Aboriginal</code></td><td>Canadian Aboriginal</td></tr>
+<tr><td><code>Carian</code></td><td>Carian</td></tr>
+<tr><td><code>Cham</code></td><td>Cham</td></tr>
+<tr><td><code>Cherokee</code></td><td>Cherokee</td></tr>
+<tr><td><code>Common</code></td><td>characters not specific to one script</td></tr>
+<tr><td><code>Coptic</code></td><td>Coptic</td></tr>
+<tr><td><code>Cuneiform</code></td><td>Cuneiform</td></tr>
+<tr><td><code>Cypriot</code></td><td>Cypriot</td></tr>
+<tr><td><code>Cyrillic</code></td><td>Cyrillic</td></tr>
+<tr><td><code>Deseret</code></td><td>Deseret</td></tr>
+<tr><td><code>Devanagari</code></td><td>Devanagari</td></tr>
+<tr><td><code>Ethiopic</code></td><td>Ethiopic</td></tr>
+<tr><td><code>Georgian</code></td><td>Georgian</td></tr>
+<tr><td><code>Glagolitic</code></td><td>Glagolitic</td></tr>
+<tr><td><code>Gothic</code></td><td>Gothic</td></tr>
+<tr><td><code>Greek</code></td><td>Greek</td></tr>
+<tr><td><code>Gujarati</code></td><td>Gujarati</td></tr>
+<tr><td><code>Gurmukhi</code></td><td>Gurmukhi</td></tr>
+<tr><td><code>Han</code></td><td>Han</td></tr>
+<tr><td><code>Hangul</code></td><td>Hangul</td></tr>
+<tr><td><code>Hanunoo</code></td><td>Hanunoo</td></tr>
+<tr><td><code>Hebrew</code></td><td>Hebrew</td></tr>
+<tr><td><code>Hiragana</code></td><td>Hiragana</td></tr>
+<tr><td><code>Inherited</code></td><td>inherit script from previous character</td></tr>
+<tr><td><code>Kannada</code></td><td>Kannada</td></tr>
+<tr><td><code>Katakana</code></td><td>Katakana</td></tr>
+<tr><td><code>Kayah_Li</code></td><td>Kayah Li</td></tr>
+<tr><td><code>Kharoshthi</code></td><td>Kharoshthi</td></tr>
+<tr><td><code>Khmer</code></td><td>Khmer</td></tr>
+<tr><td><code>Lao</code></td><td>Lao</td></tr>
+<tr><td><code>Latin</code></td><td>Latin</td></tr>
+<tr><td><code>Lepcha</code></td><td>Lepcha</td></tr>
+<tr><td><code>Limbu</code></td><td>Limbu</td></tr>
+<tr><td><code>Linear_B</code></td><td>Linear B</td></tr>
+<tr><td><code>Lycian</code></td><td>Lycian</td></tr>
+<tr><td><code>Lydian</code></td><td>Lydian</td></tr>
+<tr><td><code>Malayalam</code></td><td>Malayalam</td></tr>
+<tr><td><code>Mongolian</code></td><td>Mongolian</td></tr>
+<tr><td><code>Myanmar</code></td><td>Myanmar</td></tr>
+<tr><td><code>New_Tai_Lue</code></td><td>New Tai Lue (aka Simplified Tai Lue)</td></tr>
+<tr><td><code>Nko</code></td><td>Nko</td></tr>
+<tr><td><code>Ogham</code></td><td>Ogham</td></tr>
+<tr><td><code>Ol_Chiki</code></td><td>Ol Chiki</td></tr>
+<tr><td><code>Old_Italic</code></td><td>Old Italic</td></tr>
+<tr><td><code>Old_Persian</code></td><td>Old Persian</td></tr>
+<tr><td><code>Oriya</code></td><td>Oriya</td></tr>
+<tr><td><code>Osmanya</code></td><td>Osmanya</td></tr>
+<tr><td><code>Phags_Pa</code></td><td>'Phags Pa</td></tr>
+<tr><td><code>Phoenician</code></td><td>Phoenician</td></tr>
+<tr><td><code>Rejang</code></td><td>Rejang</td></tr>
+<tr><td><code>Runic</code></td><td>Runic</td></tr>
+<tr><td><code>Saurashtra</code></td><td>Saurashtra</td></tr>
+<tr><td><code>Shavian</code></td><td>Shavian</td></tr>
+<tr><td><code>Sinhala</code></td><td>Sinhala</td></tr>
+<tr><td><code>Sundanese</code></td><td>Sundanese</td></tr>
+<tr><td><code>Syloti_Nagri</code></td><td>Syloti Nagri</td></tr>
+<tr><td><code>Syriac</code></td><td>Syriac</td></tr>
+<tr><td><code>Tagalog</code></td><td>Tagalog</td></tr>
+<tr><td><code>Tagbanwa</code></td><td>Tagbanwa</td></tr>
+<tr><td><code>Tai_Le</code></td><td>Tai Le</td></tr>
+<tr><td><code>Tamil</code></td><td>Tamil</td></tr>
+<tr><td><code>Telugu</code></td><td>Telugu</td></tr>
+<tr><td><code>Thaana</code></td><td>Thaana</td></tr>
+<tr><td><code>Thai</code></td><td>Thai</td></tr>
+<tr><td><code>Tibetan</code></td><td>Tibetan</td></tr>
+<tr><td><code>Tifinagh</code></td><td>Tifinagh</td></tr>
+<tr><td><code>Ugaritic</code></td><td>Ugaritic</td></tr>
+<tr><td><code>Vai</code></td><td>Vai</td></tr>
+<tr><td><code>Yi</code></td><td>Yi</td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Vim character classes:</b></td></tr>
+<tr><td><code><font color=#808080>\i</font></code></td><td>identifier character <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\I</font></code></td><td><code>\i</code> except digits <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\k</font></code></td><td>keyword character <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\K</font></code></td><td><code>\k</code> except digits <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\f</font></code></td><td>file name character <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\F</font></code></td><td><code>\f</code> except digits <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\p</font></code></td><td>printable character <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\P</font></code></td><td><code>\p</code> except digits <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\s</font></code></td><td>whitespace character (≡ <code>[ \t]</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\S</font></code></td><td>non-white space character (≡ <code>[^ \t]</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code>\d</code></td><td>digits (≡ <code>[0-9]</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code>\D</code></td><td>not <code>\d</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\x</font></code></td><td>hex digits (≡ <code>[0-9A-Fa-f]</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\X</font></code></td><td>not <code>\x</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\o</font></code></td><td>octal digits (≡ <code>[0-7]</code>) <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\O</font></code></td><td>not <code>\o</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code>\w</code></td><td>word character <font size=-2>VIM</font></td></tr>
+<tr><td><code>\W</code></td><td>not <code>\w</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\h</font></code></td><td>head of word character <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\H</font></code></td><td>not <code>\h</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\a</font></code></td><td>alphabetic <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\A</font></code></td><td>not <code>\a</code> <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\l</font></code></td><td>lowercase <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\L</font></code></td><td>not lowercase <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\u</font></code></td><td>uppercase <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\U</font></code></td><td>not uppercase <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\_x</font></code></td><td><code>\x</code> plus newline, for any <code>x</code> <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Vim flags:</b></td></tr>
+<tr><td><code><font color=#808080>\c</font></code></td><td>ignore case <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\C</font></code></td><td>match case <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\m</font></code></td><td>magic <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\M</font></code></td><td>nomagic <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\v</font></code></td><td>verymagic <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\V</font></code></td><td>verynomagic <font size=-2>VIM</font></td></tr>
+<tr><td><code><font color=#808080>\Z</font></code></td><td>ignore differences in Unicode combining characters <font size=-2>VIM</font></td></tr>
+<tr><td></td></tr>
+<tr><td colspan=2><b>Magic:</b></td></tr>
+<tr><td><code><font color=#808080>(?{code})</font></code></td><td>arbitrary Perl code <font size=-2>PERL</font></td></tr>
+<tr><td><code><font color=#808080>(??{code})</font></code></td><td>postponed arbitrary Perl code <font size=-2>PERL</font></td></tr>
+<tr><td><code><font color=#808080>(?n)</font></code></td><td>recursive call to regexp capturing group <code>n</code> </td></tr>
+<tr><td><code><font color=#808080>(?+n)</font></code></td><td>recursive call to relative group <code>+n</code> </td></tr>
+<tr><td><code><font color=#808080>(?-n)</font></code></td><td>recursive call to relative group <code>-n</code> </td></tr>
+<tr><td><code><font color=#808080>(?C)</font></code></td><td>PCRE callout <font size=-2>PCRE</font></td></tr>
+<tr><td><code><font color=#808080>(?R)</font></code></td><td>recursive call to entire regexp (≡ <code>(?0)</code>) </td></tr>
+<tr><td><code><font color=#808080>(?&amp;name)</font></code></td><td>recursive call to named group </td></tr>
+<tr><td><code><font color=#808080>(?P=name)</font></code></td><td>named backreference </td></tr>
+<tr><td><code><font color=#808080>(?P&gt;name)</font></code></td><td>recursive call to named group </td></tr>
+<tr><td><code><font color=#808080>(?(cond)true|false)</font></code></td><td>conditional branch </td></tr>
+<tr><td><code><font color=#808080>(?(cond)true)</font></code></td><td>conditional branch </td></tr>
+<tr><td><code><font color=#808080>(*ACCEPT)</font></code></td><td>make regexps more like Prolog </td></tr>
+<tr><td><code><font color=#808080>(*COMMIT)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*F)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*FAIL)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*MARK)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*PRUNE)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*SKIP)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*THEN)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*ANY)</font></code></td><td>set newline convention </td></tr>
+<tr><td><code><font color=#808080>(*ANYCRLF)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*CR)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*CRLF)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*LF)</font></code></td><td></td></tr>
+<tr><td><code><font color=#808080>(*BSR_ANYCRLF)</font></code></td><td>set \R convention <font size=-2>PCRE</font></td></tr>
+<tr><td><code><font color=#808080>(*BSR_UNICODE)</font></code></td><td> <font size=-2>PCRE</font></td></tr>
+<tr><td></td></tr>
+</table>
+</body>
+</html>
diff --git a/third_party/re2/doc/syntax.txt b/third_party/re2/doc/syntax.txt
new file mode 100644
index 0000000..740e5ce
--- /dev/null
+++ b/third_party/re2/doc/syntax.txt
@@ -0,0 +1,373 @@
+RE2 regular expression syntax reference
+-------------------------­-------­-----
+
+Single characters:
+. any character, including newline (s=true)
+[xyz] character class
+[^xyz] negated character class
+\d Perl character class
+\D negated Perl character class
+[:alpha:] ASCII character class
+[:^alpha:] negated ASCII character class
+\pN Unicode character class (one-letter name)
+\p{Greek} Unicode character class
+\PN negated Unicode character class (one-letter name)
+\P{Greek} negated Unicode character class
+
+Composites:
+xy «x» followed by «y»
+x|y «x» or «y» (prefer «x»)
+
+Repetitions:
+x* zero or more «x», prefer more
+x+ one or more «x», prefer more
+x? zero or one «x», prefer one
+x{n,m} «n» or «n»+1 or ... or «m» «x», prefer more
+x{n,} «n» or more «x», prefer more
+x{n} exactly «n» «x»
+x*? zero or more «x», prefer fewer
+x+? one or more «x», prefer fewer
+x?? zero or one «x», prefer zero
+x{n,m}? «n» or «n»+1 or ... or «m» «x», prefer fewer
+x{n,}? «n» or more «x», prefer fewer
+x{n}? exactly «n» «x»
+x{} (== x*) NOT SUPPORTED vim
+x{-} (== x*?) NOT SUPPORTED vim
+x{-n} (== x{n}?) NOT SUPPORTED vim
+x= (== x?) NOT SUPPORTED vim
+
+Possessive repetitions:
+x*+ zero or more «x», possessive NOT SUPPORTED
+x++ one or more «x», possessive NOT SUPPORTED
+x?+ zero or one «x», possessive NOT SUPPORTED
+x{n,m}+ «n» or ... or «m» «x», possessive NOT SUPPORTED
+x{n,}+ «n» or more «x», possessive NOT SUPPORTED
+x{n}+ exactly «n» «x», possessive NOT SUPPORTED
+
+Grouping:
+(re) numbered capturing group
+(?P<name>re) named & numbered capturing group
+(?<name>re) named & numbered capturing group NOT SUPPORTED
+(?'name're) named & numbered capturing group NOT SUPPORTED
+(?:re) non-capturing group
+(?flags) set flags within current group; non-capturing
+(?flags:re) set flags during re; non-capturing
+(?#text) comment NOT SUPPORTED
+(?|x|y|z) branch numbering reset NOT SUPPORTED
+(?>re) possessive match of «re» NOT SUPPORTED
+re@> possessive match of «re» NOT SUPPORTED vim
+%(re) non-capturing group NOT SUPPORTED vim
+
+Flags:
+i case-insensitive (default false)
+m multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
+s let «.» match «\n» (default false)
+U ungreedy: swap meaning of «x*» and «x*?», «x+» and «x+?», etc (default false)
+Flag syntax is «xyz» (set) or «-xyz» (clear) or «xy-z» (set «xy», clear «z»).
+
+Empty strings:
+^ at beginning of text or line («m»=true)
+$ at end of text (like «\z» not «\Z») or line («m»=true)
+\A at beginning of text
+\b at word boundary («\w» on one side and «\W», «\A», or «\z» on the other)
+\B not a word boundary
+\G at beginning of subtext being searched NOT SUPPORTED pcre
+\G at end of last match NOT SUPPORTED perl
+\Z at end of text, or before newline at end of text NOT SUPPORTED
+\z at end of text
+(?=re) before text matching «re» NOT SUPPORTED
+(?!re) before text not matching «re» NOT SUPPORTED
+(?<=re) after text matching «re» NOT SUPPORTED
+(?<!re) after text not matching «re» NOT SUPPORTED
+re& before text matching «re» NOT SUPPORTED vim
+re@= before text matching «re» NOT SUPPORTED vim
+re@! before text not matching «re» NOT SUPPORTED vim
+re@<= after text matching «re» NOT SUPPORTED vim
+re@<! after text not matching «re» NOT SUPPORTED vim
+\zs sets start of match (= \K) NOT SUPPORTED vim
+\ze sets end of match NOT SUPPORTED vim
+\%^ beginning of file NOT SUPPORTED vim
+\%$ end of file NOT SUPPORTED vim
+\%V on screen NOT SUPPORTED vim
+\%# cursor position NOT SUPPORTED vim
+\%'m mark «m» position NOT SUPPORTED vim
+\%23l in line 23 NOT SUPPORTED vim
+\%23c in column 23 NOT SUPPORTED vim
+\%23v in virtual column 23 NOT SUPPORTED vim
+
+Escape sequences:
+\a bell (== \007)
+\f form feed (== \014)
+\t horizontal tab (== \011)
+\n newline (== \012)
+\r carriage return (== \015)
+\v vertical tab character (== \013)
+\* literal «*», for any punctuation character «*»
+\123 octal character code (up to three digits)
+\x7F hex character code (exactly two digits)
+\x{10FFFF} hex character code
+\C match a single byte even in UTF-8 mode
+\Q...\E literal text «...» even if «...» has punctuation
+
+\1 backreference NOT SUPPORTED
+\b backspace NOT SUPPORTED (use «\010»)
+\cK control char ^K NOT SUPPORTED (use «\001» etc)
+\e escape NOT SUPPORTED (use «\033»)
+\g1 backreference NOT SUPPORTED
+\g{1} backreference NOT SUPPORTED
+\g{+1} backreference NOT SUPPORTED
+\g{-1} backreference NOT SUPPORTED
+\g{name} named backreference NOT SUPPORTED
+\g<name> subroutine call NOT SUPPORTED
+\g'name' subroutine call NOT SUPPORTED
+\k<name> named backreference NOT SUPPORTED
+\k'name' named backreference NOT SUPPORTED
+\lX lowercase «X» NOT SUPPORTED
+\ux uppercase «x» NOT SUPPORTED
+\L...\E lowercase text «...» NOT SUPPORTED
+\K reset beginning of «$0» NOT SUPPORTED
+\N{name} named Unicode character NOT SUPPORTED
+\R line break NOT SUPPORTED
+\U...\E upper case text «...» NOT SUPPORTED
+\X extended Unicode sequence NOT SUPPORTED
+
+\%d123 decimal character 123 NOT SUPPORTED vim
+\%xFF hex character FF NOT SUPPORTED vim
+\%o123 octal character 123 NOT SUPPORTED vim
+\%u1234 Unicode character 0x1234 NOT SUPPORTED vim
+\%U12345678 Unicode character 0x12345678 NOT SUPPORTED vim
+
+Character class elements:
+x single character
+A-Z character range (inclusive)
+\d Perl character class
+[:foo:] ASCII character class «foo»
+\p{Foo} Unicode character class «Foo»
+\pF Unicode character class «F» (one-letter name)
+
+Named character classes as character class elements:
+[\d] digits (== \d)
+[^\d] not digits (== \D)
+[\D] not digits (== \D)
+[^\D] not not digits (== \d)
+[[:name:]] named ASCII class inside character class (== [:name:])
+[^[:name:]] named ASCII class inside negated character class (== [:^name:])
+[\p{Name}] named Unicode property inside character class (== \p{Name})
+[^\p{Name}] named Unicode property inside negated character class (== \P{Name})
+
+Perl character classes:
+\d digits (== [0-9])
+\D not digits (== [^0-9])
+\s whitespace (== [\t\n\f\r ])
+\S not whitespace (== [^\t\n\f\r ])
+\w word characters (== [0-9A-Za-z_])
+\W not word characters (== [^0-9A-Za-z_])
+
+\h horizontal space NOT SUPPORTED
+\H not horizontal space NOT SUPPORTED
+\v vertical space NOT SUPPORTED
+\V not vertical space NOT SUPPORTED
+
+ASCII character classes:
+[:alnum:] alphanumeric (== [0-9A-Za-z])
+[:alpha:] alphabetic (== [A-Za-z])
+[:ascii:] ASCII (== [\x00-\x7F])
+[:blank:] blank (== [\t ])
+[:cntrl:] control (== [\x00-\x1F\x7F])
+[:digit:] digits (== [0-9])
+[:graph:] graphical (== [!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
+[:lower:] lower case (== [a-z])
+[:print:] printable (== [ -~] == [ [:graph:]])
+[:punct:] punctuation (== [!-/:-@[-`{-~])
+[:space:] whitespace (== [\t\n\v\f\r ])
+[:upper:] upper case (== [A-Z])
+[:word:] word characters (== [0-9A-Za-z_])
+[:xdigit:] hex digit (== [0-9A-Fa-f])
+
+Unicode character class names--general category:
+C other
+Cc control
+Cf format
+Cn unassigned code points NOT SUPPORTED
+Co private use
+Cs surrogate
+L letter
+LC cased letter NOT SUPPORTED
+L& cased letter NOT SUPPORTED
+Ll lowercase letter
+Lm modifier letter
+Lo other letter
+Lt titlecase letter
+Lu uppercase letter
+M mark
+Mc spacing mark
+Me enclosing mark
+Mn non-spacing mark
+N number
+Nd decimal number
+Nl letter number
+No other number
+P punctuation
+Pc connector punctuation
+Pd dash punctuation
+Pe close punctuation
+Pf final punctuation
+Pi initial punctuation
+Po other punctuation
+Ps open punctuation
+S symbol
+Sc currency symbol
+Sk modifier symbol
+Sm math symbol
+So other symbol
+Z separator
+Zl line separator
+Zp paragraph separator
+Zs space separator
+
+Unicode character class names--scripts:
+Arabic Arabic
+Armenian Armenian
+Balinese Balinese
+Bengali Bengali
+Bopomofo Bopomofo
+Braille Braille
+Buginese Buginese
+Buhid Buhid
+Canadian_Aboriginal Canadian Aboriginal
+Carian Carian
+Cham Cham
+Cherokee Cherokee
+Common characters not specific to one script
+Coptic Coptic
+Cuneiform Cuneiform
+Cypriot Cypriot
+Cyrillic Cyrillic
+Deseret Deseret
+Devanagari Devanagari
+Ethiopic Ethiopic
+Georgian Georgian
+Glagolitic Glagolitic
+Gothic Gothic
+Greek Greek
+Gujarati Gujarati
+Gurmukhi Gurmukhi
+Han Han
+Hangul Hangul
+Hanunoo Hanunoo
+Hebrew Hebrew
+Hiragana Hiragana
+Inherited inherit script from previous character
+Kannada Kannada
+Katakana Katakana
+Kayah_Li Kayah Li
+Kharoshthi Kharoshthi
+Khmer Khmer
+Lao Lao
+Latin Latin
+Lepcha Lepcha
+Limbu Limbu
+Linear_B Linear B
+Lycian Lycian
+Lydian Lydian
+Malayalam Malayalam
+Mongolian Mongolian
+Myanmar Myanmar
+New_Tai_Lue New Tai Lue (aka Simplified Tai Lue)
+Nko Nko
+Ogham Ogham
+Ol_Chiki Ol Chiki
+Old_Italic Old Italic
+Old_Persian Old Persian
+Oriya Oriya
+Osmanya Osmanya
+Phags_Pa 'Phags Pa
+Phoenician Phoenician
+Rejang Rejang
+Runic Runic
+Saurashtra Saurashtra
+Shavian Shavian
+Sinhala Sinhala
+Sundanese Sundanese
+Syloti_Nagri Syloti Nagri
+Syriac Syriac
+Tagalog Tagalog
+Tagbanwa Tagbanwa
+Tai_Le Tai Le
+Tamil Tamil
+Telugu Telugu
+Thaana Thaana
+Thai Thai
+Tibetan Tibetan
+Tifinagh Tifinagh
+Ugaritic Ugaritic
+Vai Vai
+Yi Yi
+
+Vim character classes:
+\i identifier character NOT SUPPORTED vim
+\I «\i» except digits NOT SUPPORTED vim
+\k keyword character NOT SUPPORTED vim
+\K «\k» except digits NOT SUPPORTED vim
+\f file name character NOT SUPPORTED vim
+\F «\f» except digits NOT SUPPORTED vim
+\p printable character NOT SUPPORTED vim
+\P «\p» except digits NOT SUPPORTED vim
+\s whitespace character (== [ \t]) NOT SUPPORTED vim
+\S non-white space character (== [^ \t]) NOT SUPPORTED vim
+\d digits (== [0-9]) vim
+\D not «\d» vim
+\x hex digits (== [0-9A-Fa-f]) NOT SUPPORTED vim
+\X not «\x» NOT SUPPORTED vim
+\o octal digits (== [0-7]) NOT SUPPORTED vim
+\O not «\o» NOT SUPPORTED vim
+\w word character vim
+\W not «\w» vim
+\h head of word character NOT SUPPORTED vim
+\H not «\h» NOT SUPPORTED vim
+\a alphabetic NOT SUPPORTED vim
+\A not «\a» NOT SUPPORTED vim
+\l lowercase NOT SUPPORTED vim
+\L not lowercase NOT SUPPORTED vim
+\u uppercase NOT SUPPORTED vim
+\U not uppercase NOT SUPPORTED vim
+\_x «\x» plus newline, for any «x» NOT SUPPORTED vim
+
+Vim flags:
+\c ignore case NOT SUPPORTED vim
+\C match case NOT SUPPORTED vim
+\m magic NOT SUPPORTED vim
+\M nomagic NOT SUPPORTED vim
+\v verymagic NOT SUPPORTED vim
+\V verynomagic NOT SUPPORTED vim
+\Z ignore differences in Unicode combining characters NOT SUPPORTED vim
+
+Magic:
+(?{code}) arbitrary Perl code NOT SUPPORTED perl
+(??{code}) postponed arbitrary Perl code NOT SUPPORTED perl
+(?n) recursive call to regexp capturing group «n» NOT SUPPORTED
+(?+n) recursive call to relative group «+n» NOT SUPPORTED
+(?-n) recursive call to relative group «-n» NOT SUPPORTED
+(?C) PCRE callout NOT SUPPORTED pcre
+(?R) recursive call to entire regexp (== (?0)) NOT SUPPORTED
+(?&name) recursive call to named group NOT SUPPORTED
+(?P=name) named backreference NOT SUPPORTED
+(?P>name) recursive call to named group NOT SUPPORTED
+(?(cond)true|false) conditional branch NOT SUPPORTED
+(?(cond)true) conditional branch NOT SUPPORTED
+(*ACCEPT) make regexps more like Prolog NOT SUPPORTED
+(*COMMIT) NOT SUPPORTED
+(*F) NOT SUPPORTED
+(*FAIL) NOT SUPPORTED
+(*MARK) NOT SUPPORTED
+(*PRUNE) NOT SUPPORTED
+(*SKIP) NOT SUPPORTED
+(*THEN) NOT SUPPORTED
+(*ANY) set newline convention NOT SUPPORTED
+(*ANYCRLF) NOT SUPPORTED
+(*CR) NOT SUPPORTED
+(*CRLF) NOT SUPPORTED
+(*LF) NOT SUPPORTED
+(*BSR_ANYCRLF) set \R convention NOT SUPPORTED pcre
+(*BSR_UNICODE) NOT SUPPORTED pcre
+
diff --git a/third_party/re2/doc/xkcd.png b/third_party/re2/doc/xkcd.png
new file mode 100644
index 0000000..6249e8e
--- /dev/null
+++ b/third_party/re2/doc/xkcd.png
Binary files differ