Change on 2010-10-25 10:36:08-07:00 by elbaum
Clean up JSDoc output.
I removed the unused FilterFactory constructor, made ComposableFilter public and
constructFilter() private. I also changed the JSDoc template; this one organizes
the output by input files rather than consolidating the statics on one page.
I also fixed the handling of @code tags. One glitch remains: the empty docs for
all the isSuppressed() methods of the private subclasses. Not sure how those can
be removed.
Tested:
All tests pass. I also generated the jsdocs for visual inspection; they are in
file:///home/elbaum/p4/bidi/google3/docs/jsdoc/index.html
R=aharon
DELTA=128 (6 added, 10 deleted, 112 changed)
Change on 2010-10-25 10:57:48-07:00 by elbaum
Fixing syntax glitches.
Tested:
Yes.
R=aharon
DELTA=3 (0 added, 0 deleted, 3 changed)
Change on 2010-10-26 10:43:46-07:00 by elbaum
Apparently I accidently broke this file at some point; it needs Closure internally.
Tested:
Now works in my local client.
R=aharon
DELTA=6 (6 added, 0 deleted, 0 changed)
Change on 2010-10-26 10:47:25-07:00 by elbaum
Clean up HTML lint errors for user's guide.
Tested:
g4 lint now runs clean, and file looks fine in Firefox & Chrome.
R=aharon
DELTA=53 (0 added, 19 deleted, 34 changed)
Revision created by MOE tool push_codebase.
MOE_MIGRATION=963060
git-svn-id: http://bidichecker.googlecode.com/svn/trunk@3 b0874413-a7f4-6be4-17d0-addd11b1e57e
diff --git a/docs/jsdoc/_01.html b/docs/jsdoc/_01.html
new file mode 100644
index 0000000..e77e21c
--- /dev/null
+++ b/docs/jsdoc/_01.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="generator" content="JsDoc Toolkit 1.0">
+ <title>JsDoc: </title>
+ <link rel=stylesheet href="default.css" type="text/css" media=screen>
+</head>
+
+<body>
+ <div class="content">
+ <div class="docs">
+
+ <div class="sectionHead">Library: bidichecker.js</div>
+ <div class="section overview">
+ <div class="itemTitle">
+ Overview
+ </div>
+ <div>
+ <div class="desc">Testing utilities to check a web page for BiDi-related errors.
+This file has the top-level entry points for use as a Javascript API, along
+with JSON-based interface functions meant to be called from an external
+testing framework like WebDriver.</div>
+ <div class="itemTags">
+ <ul>
+ <li>source: <a href="src_01.html">bidichecker.js</a></li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="sectionHead">Constructors</div>
+
+
+
+
+
+
+
+
+
+
+ <div class="sectionHead">Functions</div>
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.checkPage"></a>
+
+
+ bidichecker.checkPage(<span class="signature">shouldBeRtl, opt_element, opt_filters</span>)
+
+ </div>
+
+
+ <div class="desc">Checks the contents of the current web page, including all nested frames, for
+BiDi-related errors. If <code>opt_element</code> is specified, checks only within
+the given element of the DOM (including any nested frames). This is the main
+entry point for the Javascript API.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ boolean
+ </td>
+ <td>
+ shouldBeRtl
+ </td>
+ <td>
+ Is the root expected to be right-to-left?
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ Element=
+ </td>
+ <td>
+ opt_element
+ </td>
+ <td>
+ The root element of the DOM subtree to be
+ checked; if null, checks the entire current web page.
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ Array.<!bidichecker.Filter>=
+ </td>
+ <td>
+ opt_filters
+ </td>
+ <td>
+ Error suppression filters.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !Array.<!bidichecker.Error>
+ </td>
+ <td>
+ Array of error objects for all failing
+ checks.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.checkPageToJson"></a>
+
+
+ bidichecker.checkPageToJson(<span class="signature">shouldBeRtl, opt_element, opt_filtersJson</span>)
+
+ </div>
+
+
+ <div class="desc">JSON interface to <code>checkPage</code>.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ boolean
+ </td>
+ <td>
+ shouldBeRtl
+ </td>
+ <td>
+ Is the element/page expected to be
+ right-to-left?
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ Element=
+ </td>
+ <td>
+ opt_element
+ </td>
+ <td>
+ The root element of the DOM subtree to be
+ checked; if null, checks the entire current web page.
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ string=
+ </td>
+ <td>
+ opt_filtersJson
+ </td>
+ <td>
+ Error suppression filters in a JSON string.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string
+ </td>
+ <td>
+ Array of <code>bidichecker.Error</code> objects for all failing
+ checks, in JSON format. If no errors were found, returns an empty array
+ ("[]").
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.runGui"></a>
+
+
+ bidichecker.runGui(<span class="signature">errors</span>)
+
+ </div>
+
+
+ <div class="desc">Runs the interactive visual error browsing mode.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ Array.<!bidichecker.Error>
+ </td>
+ <td>
+ errors
+ </td>
+ <td>
+ An array of errors to be
+ displayed.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.runGuiFromJson"></a>
+
+
+ bidichecker.runGuiFromJson(<span class="signature">errorsJson</span>)
+
+ </div>
+
+
+ <div class="desc">JSON interface to <code>runGui</code>.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string
+ </td>
+ <td>
+ errorsJson
+ </td>
+ <td>
+ An array of errors to be displayed, in JSON
+ format (similar to that produced by <code>checkPageJson()</code>).
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="sectionHead">Objects</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+ </div>
+ <div class="finePrint">
+ Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.3 on Sun, 31 Oct 2010 11:00:20 GMT.
+ </div>
+</body>
+</html>
diff --git a/docs/jsdoc/_02.html b/docs/jsdoc/_02.html
new file mode 100644
index 0000000..e45ae2c
--- /dev/null
+++ b/docs/jsdoc/_02.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="generator" content="JsDoc Toolkit 1.0">
+ <title>JsDoc: </title>
+ <link rel=stylesheet href="default.css" type="text/css" media=screen>
+</head>
+
+<body>
+ <div class="content">
+ <div class="docs">
+
+ <div class="sectionHead">Library: filter.js</div>
+ <div class="section overview">
+ <div class="itemTitle">
+ Overview
+ </div>
+ <div>
+ <div class="desc">Interface for error-suppression filters.</div>
+ <div class="itemTags">
+ <ul>
+ <li>source: <a href="src_02.html">filter.js</a></li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="sectionHead">Constructors</div>
+
+
+
+
+
+
+ <div class="sectionHead">Functions</div>
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.Filter"></a>
+
+
+ bidichecker.Filter(<span class="signature"></span>)
+
+ </div>
+
+
+ <div class="desc">Interface for an error-suppression filter.</div>
+
+
+
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+ <div class="sectionHead">Objects</div>
+
+
+
+
+
+ <div class="section object">
+ <div class="itemTitle">
+ <a name="bidichecker.Filter.isSuppressed"></a>
+
+
+ <i><a href="#bidichecker.Filter" class="type">bidichecker.Filter.</a></i>isSuppressed
+
+
+ </div>
+
+
+ <div class="desc">Decides whether to suppress a particular error.</div>
+
+
+
+
+
+ </div>
+
+
+
+ </div>
+ </div>
+ <div class="finePrint">
+ Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.3 on Sun, 31 Oct 2010 11:00:20 GMT.
+ </div>
+</body>
+</html>
diff --git a/docs/jsdoc/_03.html b/docs/jsdoc/_03.html
new file mode 100644
index 0000000..5522871
--- /dev/null
+++ b/docs/jsdoc/_03.html
@@ -0,0 +1,2176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta name="generator" content="JsDoc Toolkit 1.0">
+ <title>JsDoc: </title>
+ <link rel=stylesheet href="default.css" type="text/css" media=screen>
+</head>
+
+<body>
+ <div class="content">
+ <div class="docs">
+
+ <div class="sectionHead">Library: filterfactory.js</div>
+ <div class="section overview">
+ <div class="itemTitle">
+ Overview
+ </div>
+ <div>
+ <div class="desc">Factory methods for constructing error-suppression filters.</div>
+ <div class="itemTags">
+ <ul>
+ <li>source: <a href="src_03.html">filterfactory.js</a></li>
+
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="sectionHead">Constructors</div>
+
+
+ <div class="section constructor">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.ComposableFilter"></a>
+
+
+ bidichecker.FilterFactory.ComposableFilter(<span class="signature"></span>)
+
+ </div>
+
+
+ <div class="desc">Abstract base class for custom filter classes, providing them with
+<code>and()</code>, <code>or()</code> and <code>not()</code> methods.</div>
+
+
+
+
+
+
+
+ <div class="detailHead">methods</div>
+
+ <ul class="details">
+ <li><a href="#bidichecker.FilterFactory.ComposableFilter.and">and</a>(other)</li>
+ </ul>
+
+ <ul class="details">
+ <li><a href="#bidichecker.FilterFactory.ComposableFilter.not">not</a>()</li>
+ </ul>
+
+ <ul class="details">
+ <li><a href="#bidichecker.FilterFactory.ComposableFilter.or">or</a>(other)</li>
+ </ul>
+
+
+
+
+ <div class="detailHead">properties</div>
+
+ <ul class="details">
+ <li><a href="#bidichecker.FilterFactory.ComposableFilter.isSuppressed">isSuppressed</a></li>
+ </ul>
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="sectionHead">Functions</div>
+
+
+
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.ComposableFilter.and"></a>
+
+ <i><a href="#bidichecker.FilterFactory.ComposableFilter" class="type">bidichecker.FilterFactory.ComposableFilter.</a></i>and(<span class="signature">other</span>)
+
+
+ </div>
+
+
+ <div class="desc">Create a filter which ands this filter with another.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ other
+ </td>
+ <td>
+ The second subfilter.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.ComposableFilter.not"></a>
+
+ <i><a href="#bidichecker.FilterFactory.ComposableFilter" class="type">bidichecker.FilterFactory.ComposableFilter.</a></i>not(<span class="signature"></span>)
+
+
+ </div>
+
+
+ <div class="desc">Create a filter which inverts this filter.</div>
+
+
+
+
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.ComposableFilter.or"></a>
+
+ <i><a href="#bidichecker.FilterFactory.ComposableFilter" class="type">bidichecker.FilterFactory.ComposableFilter.</a></i>or(<span class="signature">other</span>)
+
+
+ </div>
+
+
+ <div class="desc">Create a filter which ors this filter with another.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ other
+ </td>
+ <td>
+ The second subfilter.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.readFiltersFromJson"></a>
+
+
+ bidichecker.FilterFactory.readFiltersFromJson(<span class="signature">opt_filtersJson</span>)
+
+ </div>
+
+
+ <div class="desc">Deserializes a list of suppression filters from a JSON-format string.
+Throws a string exception if an unknown filter is encountered.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string=
+ </td>
+ <td>
+ opt_filtersJson
+ </td>
+ <td>
+ The input string, if provided.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ Array.<!bidichecker.Filter>
+ </td>
+ <td>
+ The error suppression filters.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.and"></a>
+
+
+ bidichecker.FilterFactory.and(<span class="signature">filter1, filter2</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by and-ing component filters.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ filter1
+ </td>
+ <td>
+ The first subfilter.
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ filter2
+ </td>
+ <td>
+ The second subfilter.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.atText"></a>
+
+
+ bidichecker.FilterFactory.atText(<span class="signature">atText</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a literal match of their
+<code>atText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ ?string
+ </td>
+ <td>
+ atText
+ </td>
+ <td>
+ A string which must match the entire <code>atText</code>
+ field. If empty or null, will only match an empty or null <code>atText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.atTextRegexp"></a>
+
+
+ bidichecker.FilterFactory.atTextRegexp(<span class="signature">atTextRegexp</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by applying a regular expression to
+their <code>atText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string, RegExp
+ </td>
+ <td>
+ atTextRegexp
+ </td>
+ <td>
+ A regular expression, which must match
+ the entire <code>atText</code> field. If empty or null, will only match an
+ empty or null <code>atText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.followedByText"></a>
+
+
+ bidichecker.FilterFactory.followedByText(<span class="signature">followedByText</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a literal match of their
+<code>followedByText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ ?string
+ </td>
+ <td>
+ followedByText
+ </td>
+ <td>
+ A string which must match the entire
+ <code>followedByText</code> field. If empty or null, will only match an empty
+ or null <code>followedByText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.followedByTextRegexp"></a>
+
+
+ bidichecker.FilterFactory.followedByTextRegexp(<span class="signature">followedByTextRegexp</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by applying a regular expression to
+their <code>followedByText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string, RegExp
+ </td>
+ <td>
+ followedByTextRegexp
+ </td>
+ <td>
+ A regular expression, which must
+ match the entire <code>followedByText</code> field. If empty or null, will
+ only match an empty or null <code>followedByText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.locationClass"></a>
+
+
+ bidichecker.FilterFactory.locationClass(<span class="signature">className</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a literal match of one of
+the class names of any parent node of the error location in the DOM.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string
+ </td>
+ <td>
+ className
+ </td>
+ <td>
+ A string which must match one of the class names in
+ the <code>class</code> attribute of the location or one of its ancestors. Must
+ not be empty or null.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.locationClassRegexp"></a>
+
+
+ bidichecker.FilterFactory.locationClassRegexp(<span class="signature">classRegexp</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a regular expression match
+of one of the class names of any parent node of the error location in the
+DOM.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string, RegExp
+ </td>
+ <td>
+ classRegexp
+ </td>
+ <td>
+ A regular expression, which must match
+ one of the class names in the <code>class</code> attribute of the location or
+ one of its ancestors. Must not be empty or null.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.locationId"></a>
+
+
+ bidichecker.FilterFactory.locationId(<span class="signature">id</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a literal match of the error
+location's (or one of its DOM ancestors') <code>id</code> attribute.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string
+ </td>
+ <td>
+ id
+ </td>
+ <td>
+ A string which must match the entire <code>id</code> attribute
+ of the location or one of its ancestors. Must not be empty or null.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.locationIdRegexp"></a>
+
+
+ bidichecker.FilterFactory.locationIdRegexp(<span class="signature">idRegexp</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by applying a regular expression to
+the error location's (or one of its DOM ancestors') <code>id</code> attribute.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string, RegExp
+ </td>
+ <td>
+ idRegexp
+ </td>
+ <td>
+ A regular expression, which must match the
+ entire <code>id</code> attribute of the location or one of its ancestors. Must
+ not be empty or null.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.not"></a>
+
+
+ bidichecker.FilterFactory.not(<span class="signature">filter</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by inverting another filter.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ filter
+ </td>
+ <td>
+ The subfilter.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.or"></a>
+
+
+ bidichecker.FilterFactory.or(<span class="signature">filter1, filter2</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by or-ing component filters.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ filter1
+ </td>
+ <td>
+ The first subfilter.
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+ !bidichecker.Filter
+ </td>
+ <td>
+ filter2
+ </td>
+ <td>
+ The second subfilter.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.precededByText"></a>
+
+
+ bidichecker.FilterFactory.precededByText(<span class="signature">precededByText</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on a literal match of their
+<code>precededByText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ ?string
+ </td>
+ <td>
+ precededByText
+ </td>
+ <td>
+ A string which must match the entire
+ <code>precededByText</code> field. If empty or null, will only match an empty
+ or null <code>precededByText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.precededByTextRegexp"></a>
+
+
+ bidichecker.FilterFactory.precededByTextRegexp(<span class="signature">precededByTextRegexp</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors by applying a regular expression to
+their <code>precededByText</code> fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string, RegExp
+ </td>
+ <td>
+ precededByTextRegexp
+ </td>
+ <td>
+ A regular expression, which must
+ match the entire <code>precededByText</code> field. If empty or null, will
+ only match an empty or null <code>precededByText</code>.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.severityFrom"></a>
+
+
+ bidichecker.FilterFactory.severityFrom(<span class="signature">severityThreshold</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on their severity levels.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ number
+ </td>
+ <td>
+ severityThreshold
+ </td>
+ <td>
+ the severity level from which errors should
+ be suppressed. At level 1, all messages will be filtered out. Note that
+ higher values indicate lower severities.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.type"></a>
+
+
+ bidichecker.FilterFactory.type(<span class="signature">type</span>)
+
+ </div>
+
+
+ <div class="desc">Create a filter which suppresses errors based on their type fields.</div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ string
+ </td>
+ <td>
+ type
+ </td>
+ <td>
+ The error type name to be matched exactly.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ <div class="detailHead">returns</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+ !bidichecker.FilterFactory.ComposableFilter
+ </td>
+ <td>
+ A filter object.
+ </td>
+ </tr>
+
+ </table>
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.AndFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.AndFilter_" class="type">bidichecker.FilterFactory.AndFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.AtTextFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.AtTextFilter_" class="type">bidichecker.FilterFactory.AtTextFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.AtTextRegexpFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.AtTextRegexpFilter_" class="type">bidichecker.FilterFactory.AtTextRegexpFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.FollowedByTextFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.FollowedByTextFilter_" class="type">bidichecker.FilterFactory.FollowedByTextFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.FollowedByTextRegexpFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.FollowedByTextRegexpFilter_" class="type">bidichecker.FilterFactory.FollowedByTextRegexpFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.LocationClassFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.LocationClassFilter_" class="type">bidichecker.FilterFactory.LocationClassFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.LocationClassRegexpFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.LocationClassRegexpFilter_" class="type">bidichecker.FilterFactory.LocationClassRegexpFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.LocationIdFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.LocationIdFilter_" class="type">bidichecker.FilterFactory.LocationIdFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.LocationIdRegexpFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.LocationIdRegexpFilter_" class="type">bidichecker.FilterFactory.LocationIdRegexpFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.NotFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.NotFilter_" class="type">bidichecker.FilterFactory.NotFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.OrFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.OrFilter_" class="type">bidichecker.FilterFactory.OrFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.PrecededByTextFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.PrecededByTextFilter_" class="type">bidichecker.FilterFactory.PrecededByTextFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.PrecededByTextRegexpFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.PrecededByTextRegexpFilter_" class="type">bidichecker.FilterFactory.PrecededByTextRegexpFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.SeverityFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.SeverityFilter_" class="type">bidichecker.FilterFactory.SeverityFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="section function">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.TypeFilter_.isSuppressed"></a>
+
+ <i><a href="#bidichecker.FilterFactory.TypeFilter_" class="type">bidichecker.FilterFactory.TypeFilter_.</a></i>isSuppressed(<span class="signature">error, locationElements</span>)
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ <div class="detailHead">parameters</div>
+ <table class="params">
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ error
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ <tr>
+ <td class="type">
+
+ </td>
+ <td>
+ locationElements
+ </td>
+ <td>
+
+ </td>
+ </tr>
+
+ </table>
+
+
+
+
+
+ </div>
+
+
+
+ <div class="sectionHead">Objects</div>
+
+
+
+
+
+ <div class="section object">
+ <div class="itemTitle">
+ <a name="bidichecker.FilterFactory.ComposableFilter.isSuppressed"></a>
+
+
+ <i><a href="#bidichecker.FilterFactory.ComposableFilter" class="type">bidichecker.FilterFactory.ComposableFilter.</a></i>isSuppressed
+
+
+ </div>
+
+
+ <div class="desc"></div>
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div>
+ </div>
+ <div class="finePrint">
+ Generated by <a href="http://jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> 1.3.3 on Sun, 31 Oct 2010 11:00:20 GMT.
+ </div>
+</body>
+</html>
diff --git a/docs/jsdoc/allclasses-frame.html b/docs/jsdoc/allclasses-frame.html
deleted file mode 100644
index 9785723..0000000
--- a/docs/jsdoc/allclasses-frame.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>JsDoc</title>
- <link rel=stylesheet href="default.css" type="text/css" media=screen>
- <meta name="generator" content="JsDoc Toolkit 1.0">
- <style>
- body {
- font-size: 10pt;
- font-family: Helvetica, Arial, san-serif;
- }
- </style>
-</head>
-<body>
-<b>All Classes</b>
-<ul>
- <li><a href="globals.html" target="main">GLOBALS</a></li>
-
- <li><a href="bidichecker.FilterFactory.html" target="main">bidichecker.FilterFactory</a></li>
-
-</ul>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/jsdoc/bidichecker.FilterFactory.html b/docs/jsdoc/bidichecker.FilterFactory.html
deleted file mode 100644
index 1c0a731..0000000
--- a/docs/jsdoc/bidichecker.FilterFactory.html
+++ /dev/null
@@ -1,158 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>JsDoc: bidichecker.FilterFactory</title>
- <style type="text/css">
- body { background-color: #FFFFFF; }
- .TableHeadingColor { background: #CCCCFF; }
- .TableSubHeadingColor { background: #EEEEFF; }
- .TableRowColor { background: #FFFFFF; }
-
- .FrameTitleFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .FrameHeadingFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .FrameItemFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .NavBar
- {
- font-family: Arial, Helvetica, sans-serif;
- background-color: #FFFFFF;
- }
-
- .jsdoc_ctime
- {
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- text-align: right;
- }
- </style>
-</head>
-
-<body>
-
-<table style="width: 100%">
-<tr>
-<td class="NavBar" valign="top"><font size="-2">SUMMARY: <a href="#field_summary">FIELD</a> | <a href="#constructor_summary">CONSTR</a> | <a href="#method_summary">METHOD</a></font></td>
-<td class="NavBar" valign="top"><font size="-2">DETAIL: <a href="#field_detail">FIELD</a> | <a href="#constructor_detail">CONSTR</a> | <a href="#method_detail">METHOD</a></font></td>
-</tr>
-</table>
-
-<hr>
-
-<h2>Class bidichecker.FilterFactory</h2>
-
-
-<i>Defined in <a href="filterfactory.src.html">filterfactory.js</a></i>
-
-
-
-
-
-<hr>
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<!-- =========== END FIELD SUMMARY =========== -->
-
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<a name="constructor_summary"> </a>
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
-<tr bgcolor="#CCCCFF" class="TableHeadingColor">
- <td colspan=2><font size="+2"><b>Constructor Summary</b></font></td>
-</tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td>
-
- <code>
- <b><a href="#bidichecker.FilterFactory">bidichecker.FilterFactory</a></b>()
- </code>
- <br>
-
- Factory class that constructs error-suppression filters from bare objects
-deserialized from JSON.
- </td>
- </tr>
-
-</table>
-
-<!-- ======== END CONSTRUCTOR SUMMARY ======== -->
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<!-- ========== EVENT SUMMARY =========== -->
-
-
-
-<!-- ========== INHERITED METHODS SUMMARY =========== -->
-
-<br/>
-
-<!-- ========== END INHERITED METHODS SUMMARY =========== -->
-
-<!-- ============ FIELD DETAIL START ========= -->
-
-<!-- ============ FIELD DETAIL END ========== -->
-
-
-<!-- ========= CONSTRUCTOR DETAIL START ======== -->
-<a name="constructor_detail"> </a>
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
- <tr bgcolor="#CCCCFF" class="TableHeadingColor">
- <td colspan=1>
- <font size="+2"><b>Constructor Detail</b></font>
- </td>
- </tr>
-
-</table>
-
-<a name="bidichecker.FilterFactory"> </a>
-<h3>bidichecker.FilterFactory</h3>
-
- <pre><b>bidichecker.FilterFactory</b>()</pre>
- <ul>
- Factory class that constructs error-suppression filters from bare objects
-deserialized from JSON.
- </ul>
-
- <!-- PARAMETERS START -->
-
- <!-- PARAMETERS END -->
-
-<hr/>
-<!-- END ADDITIONAL ATTRIBUTES -->
-<!-- ========= CONSTRUCTOR DETAIL END ======== -->
-
-
-<!-- ============ METHOD DETAIL START ======= -->
-
-<!-- ============ METHOD DETAIL END ========== -->
-
-
-
-<!-- ============ EVENT DETAIL START ======= -->
-
-
-
-<!-- ============ EVENT DETAIL END ========== -->
-<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoctoolkit.org/" target="_parent">JsDoc Toolkit</a> 1.3.3 on Sun Oct 24 2010 14:05:39 GMT+0100 (IST)</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/jsdoc/constructor.gif b/docs/jsdoc/constructor.gif
new file mode 100644
index 0000000..ba77997
--- /dev/null
+++ b/docs/jsdoc/constructor.gif
Binary files differ
diff --git a/docs/jsdoc/default.css b/docs/jsdoc/default.css
new file mode 100644
index 0000000..cfe837b
--- /dev/null
+++ b/docs/jsdoc/default.css
@@ -0,0 +1,116 @@
+body,a
+{
+ color: #000;
+ font: 12px verdana;
+}
+
+ul
+{
+ list-style-type: none;
+ margin-left: 10px;
+ padding-left: 10px;
+}
+
+.content { }
+.docs { }
+.signature { font-weight: normal; }
+.code {
+ font: 11px monaco,monospace;
+ padding: 4px;
+ margin-left: 18px;
+ border: 1px dashed #ccc;
+}
+
+.itemTitle
+{
+ font-size: 12px;
+ font-weight: bold;
+ height: 16px;
+}
+
+.item { }
+
+.sectionHead
+{
+ font-size: 18px;
+ font-weight: bold;
+ background-color: #C0C1DE;
+ color: #fff;
+ margin-top: 18px;
+ padding: 2px 4px 2px 4px;
+}
+
+.section
+{
+ padding: 8px;
+ border: 1px #8A92BC solid;
+ margin: 4px;
+}
+
+.detailHead
+{
+ border-bottom: 1px #8FB685 dotted;
+ font-size: 12px;
+ font-weight: bold;
+ color: #798E73;
+ margin-top: 18px;
+}
+
+.desc { padding: 8px; }
+
+.fileHead
+{
+ background-image: url(file.gif);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+ font-weight: bold;
+ font-size: 14px;
+ line-height: 20px;
+}
+
+.overview .itemTitle
+{
+ background-image: url(overview.gif);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+
+.constructor .itemTitle
+{
+ background-image: url(constructor.gif);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+
+.function .itemTitle
+{
+ background-image: url(function.gif);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+
+.object .itemTitle
+{
+ background-image: url(object.gif);
+ background-repeat: no-repeat;
+ padding-left: 20px;
+}
+
+.type
+{
+ font-style: italic;
+ color: #999;
+ font-weight: normal;
+}
+
+.itemTitle a.type { font-weight: bold; }
+
+.finePrint
+{
+ color: #878787;
+ font-family: verdana;
+ font-size: 10px;
+ text-align: right;
+}
+
+.params td { padding-right: 10px; }
\ No newline at end of file
diff --git a/docs/jsdoc/file.gif b/docs/jsdoc/file.gif
new file mode 100644
index 0000000..9c7446e
--- /dev/null
+++ b/docs/jsdoc/file.gif
Binary files differ
diff --git a/docs/jsdoc/file_list.html b/docs/jsdoc/file_list.html
new file mode 100644
index 0000000..2d66a64
--- /dev/null
+++ b/docs/jsdoc/file_list.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>JsDoc</title>
+ <link rel=stylesheet href="default.css" type="text/css" media=screen>
+ <meta name="generator" content="JsDoc Toolkit 1.0">
+</head>
+<body>
+<div class="sectionHead">File Index</div>
+<ul>
+
+ <li style="margin-bottom: 16px;">
+ <a href="_01.html" target="main" class="fileHead">bidichecker.js</a>
+ <ul>
+
+ </ul>
+ </li>
+
+ <li style="margin-bottom: 16px;">
+ <a href="_02.html" target="main" class="fileHead">filter.js</a>
+ <ul>
+
+ </ul>
+ </li>
+
+ <li style="margin-bottom: 16px;">
+ <a href="_03.html" target="main" class="fileHead">filterfactory.js</a>
+ <ul>
+
+ <li><a href="_03.html#bidichecker.FilterFactory.ComposableFilter" target="main">bidichecker.FilterFactory.ComposableFilter</a></li>
+
+ </ul>
+ </li>
+
+</ul>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/jsdoc/filterfactory.src.html b/docs/jsdoc/filterfactory.src.html
deleted file mode 100644
index e5a9773..0000000
--- a/docs/jsdoc/filterfactory.src.html
+++ /dev/null
@@ -1,1000 +0,0 @@
-<html><head><style>
- .KEYW {color: #933;}
- .COMM {color: #bbb; font-style: italic;}
- .NUMB {color: #393;}
- .STRN {color: #393;}
- .REGX {color: #339;}
- .linenumber {border-right: 1px dotted #666; color: #666; font-style: normal;}
- </style></head><body><pre><span class='linenumber'> 1</span> <span class="COMM">// Copyright 2009 Google Inc. All Rights Reserved.</span><span class="WHIT">
-<span class='linenumber'> 2</span> </span><span class="COMM">//</span><span class="WHIT">
-<span class='linenumber'> 3</span> </span><span class="COMM">// Licensed under the Apache License, Version 2.0 (the "License");</span><span class="WHIT">
-<span class='linenumber'> 4</span> </span><span class="COMM">// you may not use this file except in compliance with the License.</span><span class="WHIT">
-<span class='linenumber'> 5</span> </span><span class="COMM">// You may obtain a copy of the License at</span><span class="WHIT">
-<span class='linenumber'> 6</span> </span><span class="COMM">//</span><span class="WHIT">
-<span class='linenumber'> 7</span> </span><span class="COMM">// http://www.apache.org/licenses/LICENSE-2.0</span><span class="WHIT">
-<span class='linenumber'> 8</span> </span><span class="COMM">//</span><span class="WHIT">
-<span class='linenumber'> 9</span> </span><span class="COMM">// Unless required by applicable law or agreed to in writing, software</span><span class="WHIT">
-<span class='linenumber'> 10</span> </span><span class="COMM">// distributed under the License is distributed on an "AS-IS" BASIS,</span><span class="WHIT">
-<span class='linenumber'> 11</span> </span><span class="COMM">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span><span class="WHIT">
-<span class='linenumber'> 12</span> </span><span class="COMM">// See the License for the specific language governing permissions and</span><span class="WHIT">
-<span class='linenumber'> 13</span> </span><span class="COMM">// limitations under the License.</span><span class="WHIT">
-<span class='linenumber'> 14</span>
-<span class='linenumber'> 15</span> </span><span class="COMM">/**
-<span class='linenumber'> 16</span> * @fileoverview Factory for constructing filters from deserialized objects.
-<span class='linenumber'> 17</span> * In this file, filters (whether their static factory methods or their class
-<span class='linenumber'> 18</span> * definitions) are ordered alphabetically.
-<span class='linenumber'> 19</span> */</span><span class="WHIT">
-<span class='linenumber'> 20</span>
-<span class='linenumber'> 21</span>
-<span class='linenumber'> 22</span> </span><span class="NAME">goog.provide</span><span class="PUNC">(</span><span class="STRN">'bidichecker.FilterFactory'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 23</span>
-<span class='linenumber'> 24</span> </span><span class="NAME">goog.require</span><span class="PUNC">(</span><span class="STRN">'bidichecker.Filter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 25</span> </span><span class="NAME">goog.require</span><span class="PUNC">(</span><span class="STRN">'goog.json'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 26</span>
-<span class='linenumber'> 27</span>
-<span class='linenumber'> 28</span> </span><span class="COMM">/**
-<span class='linenumber'> 29</span> * Factory class that constructs error-suppression filters from bare objects
-<span class='linenumber'> 30</span> * deserialized from JSON.
-<span class='linenumber'> 31</span> * @constructor
-<span class='linenumber'> 32</span> * @export
-<span class='linenumber'> 33</span> */</span><span class="WHIT">
-<span class='linenumber'> 34</span> </span><span class="NAME">bidichecker.FilterFactory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 35</span>
-<span class='linenumber'> 36</span>
-<span class='linenumber'> 37</span> </span><span class="COMM">/**
-<span class='linenumber'> 38</span> * Abstract base class for custom filter classes, providing them with {@code
-<span class='linenumber'> 39</span> * and()}, <code>or()</code> and {@code not()} methods.
-<span class='linenumber'> 40</span> * @constructor
-<span class='linenumber'> 41</span> * @implements {bidichecker.Filter}
-<span class='linenumber'> 42</span> * @private
-<span class='linenumber'> 43</span> * @export
-<span class='linenumber'> 44</span> */</span><span class="WHIT">
-<span class='linenumber'> 45</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 46</span>
-<span class='linenumber'> 47</span>
-<span class='linenumber'> 48</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'> 49</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'> 50</span> </span><span class="NAME">goog.abstractMethod</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 51</span>
-<span class='linenumber'> 52</span>
-<span class='linenumber'> 53</span> </span><span class="COMM">/**
-<span class='linenumber'> 54</span> * Create a filter which ands this filter with another.
-<span class='linenumber'> 55</span> * @param {!bidichecker.Filter} other The second subfilter.
-<span class='linenumber'> 56</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'> 57</span> * @export
-<span class='linenumber'> 58</span> */</span><span class="WHIT">
-<span class='linenumber'> 59</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_.prototype.and</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">other</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'> 60</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.and</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">other</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 61</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 62</span>
-<span class='linenumber'> 63</span>
-<span class='linenumber'> 64</span> </span><span class="COMM">/**
-<span class='linenumber'> 65</span> * Create a filter which inverts this filter.
-<span class='linenumber'> 66</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'> 67</span> * @export
-<span class='linenumber'> 68</span> */</span><span class="WHIT">
-<span class='linenumber'> 69</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_.prototype.not</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'> 70</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.not</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 71</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 72</span>
-<span class='linenumber'> 73</span>
-<span class='linenumber'> 74</span> </span><span class="COMM">/**
-<span class='linenumber'> 75</span> * Create a filter which ors this filter with another.
-<span class='linenumber'> 76</span> * @param {!bidichecker.Filter} other The second subfilter.
-<span class='linenumber'> 77</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'> 78</span> * @export
-<span class='linenumber'> 79</span> */</span><span class="WHIT">
-<span class='linenumber'> 80</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_.prototype.or</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">other</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'> 81</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.or</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">other</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 82</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 83</span>
-<span class='linenumber'> 84</span>
-<span class='linenumber'> 85</span> </span><span class="COMM">/**
-<span class='linenumber'> 86</span> * Constructs a suppression filter from a bare object with suitable contents.
-<span class='linenumber'> 87</span> * For use in deserializing filters from JSON. Throws a string exception if an
-<span class='linenumber'> 88</span> * invalid filter is encountered.
-<span class='linenumber'> 89</span> * @param {!Object} bareFilter The object representing the filter. Must contain
-<span class='linenumber'> 90</span> * an <code>'opcode'</code> field with a string indicating the filter type.
-<span class='linenumber'> 91</span> * Other supported field names and types are dependent on the filter type.
-<span class='linenumber'> 92</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} The new filter.
-<span class='linenumber'> 93</span> */</span><span class="WHIT">
-<span class='linenumber'> 94</span> </span><span class="NAME">bidichecker.FilterFactory.constructFilter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'> 95</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opcode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareFilter</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 96</span> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opcode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'> 97</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AND'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'> 98</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'> 99</span>
-<span class='linenumber'>100</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AT_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>101</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>102</span>
-<span class='linenumber'>103</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AT_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>104</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>105</span>
-<span class='linenumber'>106</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'FOLLOWED_BY_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>107</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>108</span>
-<span class='linenumber'>109</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'FOLLOWED_BY_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>110</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>111</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>112</span>
-<span class='linenumber'>113</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_CLASS'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>114</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>115</span>
-<span class='linenumber'>116</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_CLASS_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>117</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>118</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>119</span>
-<span class='linenumber'>120</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_ID'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>121</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>122</span>
-<span class='linenumber'>123</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_ID_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>124</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>125</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>126</span>
-<span class='linenumber'>127</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'NOT'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>128</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>129</span>
-<span class='linenumber'>130</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'OR'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>131</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>132</span>
-<span class='linenumber'>133</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'PRECEDED_BY_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>134</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>135</span>
-<span class='linenumber'>136</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'PRECEDED_BY_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>137</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>138</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>139</span>
-<span class='linenumber'>140</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'SEVERITY'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>141</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>142</span>
-<span class='linenumber'>143</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'TYPE'</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>144</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>145</span>
-<span class='linenumber'>146</span> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
-<span class='linenumber'>147</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Unknown filter opcode: \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">opcode</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\''</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>148</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>149</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>150</span>
-<span class='linenumber'>151</span>
-<span class='linenumber'>152</span> </span><span class="COMM">/**
-<span class='linenumber'>153</span> * Deserializes a list of suppression filters from a JSON-format string.
-<span class='linenumber'>154</span> * Throws a string exception if an unknown filter is encountered.
-<span class='linenumber'>155</span> * @param {string=} opt_filtersJson The input string, if provided.
-<span class='linenumber'>156</span> * @return {Array.<!bidichecker.Filter>} The error suppression filters.
-<span class='linenumber'>157</span> */</span><span class="WHIT">
-<span class='linenumber'>158</span> </span><span class="NAME">bidichecker.FilterFactory.readFiltersFromJson</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>159</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>160</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>161</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>162</span>
-<span class='linenumber'>163</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bareFilters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>164</span> </span><span class="PUNC">(</span><span class="COMM">/** @type {Array.<!Object>} */</span><span class="WHIT"> </span><span class="NAME">goog.json.parse</span><span class="PUNC">(</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>165</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">goog.array.map</span><span class="PUNC">(</span><span class="NAME">bareFilters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>166</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.constructFilter</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>167</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>168</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>169</span>
-<span class='linenumber'>170</span>
-<span class='linenumber'>171</span> </span><span class="COMM">/**
-<span class='linenumber'>172</span> * Create a filter which suppresses errors by and-ing component filters.
-<span class='linenumber'>173</span> * @param {!bidichecker.Filter} filter1 The first subfilter.
-<span class='linenumber'>174</span> * @param {!bidichecker.Filter} filter2 The second subfilter.
-<span class='linenumber'>175</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>176</span> * @export
-<span class='linenumber'>177</span> */</span><span class="WHIT">
-<span class='linenumber'>178</span> </span><span class="NAME">bidichecker.FilterFactory.and</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>179</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>180</span> </span><span class="PUNC">{</span><span class="STRN">'filter1'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>181</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>182</span>
-<span class='linenumber'>183</span>
-<span class='linenumber'>184</span> </span><span class="COMM">/**
-<span class='linenumber'>185</span> * Create a filter which suppresses errors based on a literal match of their
-<span class='linenumber'>186</span> * <code>atText</code> fields.
-<span class='linenumber'>187</span> * @param {?string} atText A string which must match the entire <code>atText</code>
-<span class='linenumber'>188</span> * field. If empty or null, will only match an empty or null <code>atText</code>.
-<span class='linenumber'>189</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>190</span> * @export
-<span class='linenumber'>191</span> */</span><span class="WHIT">
-<span class='linenumber'>192</span> </span><span class="NAME">bidichecker.FilterFactory.atText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">atText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>193</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'atText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">atText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>194</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>195</span>
-<span class='linenumber'>196</span>
-<span class='linenumber'>197</span> </span><span class="COMM">/**
-<span class='linenumber'>198</span> * Create a filter which suppresses errors by applying a regular expression to
-<span class='linenumber'>199</span> * their <code>atText</code> fields.
-<span class='linenumber'>200</span> * @param {string|RegExp} atTextRegexp A regular expression, which must match
-<span class='linenumber'>201</span> * the entire <code>atText</code> field. If empty or null, will only match an
-<span class='linenumber'>202</span> * empty or null <code>atText</code>.
-<span class='linenumber'>203</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>204</span> * @export
-<span class='linenumber'>205</span> */</span><span class="WHIT">
-<span class='linenumber'>206</span> </span><span class="NAME">bidichecker.FilterFactory.atTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">atTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>207</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>208</span> </span><span class="PUNC">{</span><span class="STRN">'atTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">atTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>209</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>210</span>
-<span class='linenumber'>211</span>
-<span class='linenumber'>212</span> </span><span class="COMM">/**
-<span class='linenumber'>213</span> * Create a filter which suppresses errors based on a literal match of their
-<span class='linenumber'>214</span> * <code>followedByText</code> fields.
-<span class='linenumber'>215</span> * @param {?string} followedByText A string which must match the entire {@code
-<span class='linenumber'>216</span> * followedByText} field. If empty or null, will only match an empty or null
-<span class='linenumber'>217</span> * <code>followedByText</code>.
-<span class='linenumber'>218</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>219</span> * @export
-<span class='linenumber'>220</span> */</span><span class="WHIT">
-<span class='linenumber'>221</span> </span><span class="NAME">bidichecker.FilterFactory.followedByText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">followedByText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>222</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>223</span> </span><span class="PUNC">{</span><span class="STRN">'followedByText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">followedByText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>224</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>225</span>
-<span class='linenumber'>226</span>
-<span class='linenumber'>227</span> </span><span class="COMM">/**
-<span class='linenumber'>228</span> * Create a filter which suppresses errors by applying a regular expression to
-<span class='linenumber'>229</span> * their <code>followedByText</code> fields.
-<span class='linenumber'>230</span> * @param {string|RegExp} followedByTextRegexp A regular expression, which must
-<span class='linenumber'>231</span> * match the entire <code>followedByText</code> field. If empty or null, will
-<span class='linenumber'>232</span> * only match an empty or null <code>followedByText</code>.
-<span class='linenumber'>233</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>234</span> * @export
-<span class='linenumber'>235</span> */</span><span class="WHIT">
-<span class='linenumber'>236</span> </span><span class="NAME">bidichecker.FilterFactory.followedByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>237</span> </span><span class="NAME">followedByTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>238</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>239</span> </span><span class="PUNC">{</span><span class="STRN">'followedByTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">followedByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>240</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>241</span>
-<span class='linenumber'>242</span>
-<span class='linenumber'>243</span> </span><span class="COMM">/**
-<span class='linenumber'>244</span> * Create a filter which suppresses errors based on a literal match of one of
-<span class='linenumber'>245</span> * the class names of any parent node of the error location in the DOM.
-<span class='linenumber'>246</span> * @param {string} className A string which must match one of the class names in
-<span class='linenumber'>247</span> * the <code>class</code> attribute of the location or one of its ancestors. Must
-<span class='linenumber'>248</span> * not be empty or null.
-<span class='linenumber'>249</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>250</span> * @export
-<span class='linenumber'>251</span> */</span><span class="WHIT">
-<span class='linenumber'>252</span> </span><span class="NAME">bidichecker.FilterFactory.locationClass</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>253</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>254</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to bidichecker.FilterFactory.locationClass'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>255</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>256</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>257</span> </span><span class="PUNC">{</span><span class="STRN">'className'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">className</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>258</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>259</span>
-<span class='linenumber'>260</span>
-<span class='linenumber'>261</span> </span><span class="COMM">/**
-<span class='linenumber'>262</span> * Create a filter which suppresses errors based on a regular expression match
-<span class='linenumber'>263</span> * of one of the class names of any parent node of the error location in the
-<span class='linenumber'>264</span> * DOM.
-<span class='linenumber'>265</span> * @param {string|RegExp} classRegexp A regular expression, which must match
-<span class='linenumber'>266</span> * one of the class names in the <code>class</code> attribute of the location or
-<span class='linenumber'>267</span> * one of its ancestors. Must not be empty or null.
-<span class='linenumber'>268</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>269</span> * @export
-<span class='linenumber'>270</span> */</span><span class="WHIT">
-<span class='linenumber'>271</span> </span><span class="NAME">bidichecker.FilterFactory.locationClassRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">classRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>272</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">classRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">classRegexp</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>273</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>274</span> </span><span class="STRN">'bidichecker.FilterFactory.locationClassRegexp'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>275</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>276</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>277</span> </span><span class="PUNC">{</span><span class="STRN">'classRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">classRegexp</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>278</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>279</span>
-<span class='linenumber'>280</span>
-<span class='linenumber'>281</span> </span><span class="COMM">/**
-<span class='linenumber'>282</span> * Create a filter which suppresses errors based on a literal match of the error
-<span class='linenumber'>283</span> * location's (or one of its DOM ancestors') <code>id</code> attribute.
-<span class='linenumber'>284</span> * @param {string} id A string which must match the entire <code>id</code> attribute
-<span class='linenumber'>285</span> * of the location or one of its ancestors. Must not be empty or null.
-<span class='linenumber'>286</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>287</span> * @export
-<span class='linenumber'>288</span> */</span><span class="WHIT">
-<span class='linenumber'>289</span> </span><span class="NAME">bidichecker.FilterFactory.locationId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>290</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>291</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to bidichecker.FilterFactory.locationId'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>292</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>293</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'id'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>294</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>295</span>
-<span class='linenumber'>296</span>
-<span class='linenumber'>297</span> </span><span class="COMM">/**
-<span class='linenumber'>298</span> * Create a filter which suppresses errors by applying a regular expression to
-<span class='linenumber'>299</span> * the error location's (or one of its DOM ancestors') <code>id</code> attribute.
-<span class='linenumber'>300</span> * @param {string|RegExp} idRegexp A regular expression, which must match the
-<span class='linenumber'>301</span> * entire <code>id</code> attribute of the location or one of its ancestors. Must
-<span class='linenumber'>302</span> * not be empty or null.
-<span class='linenumber'>303</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>304</span> * @export
-<span class='linenumber'>305</span> */</span><span class="WHIT">
-<span class='linenumber'>306</span> </span><span class="NAME">bidichecker.FilterFactory.locationIdRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">idRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>307</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">idRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">idRegexp</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>308</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>309</span> </span><span class="STRN">'bidichecker.FilterFactory.locationIdRegexp'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>310</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>311</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>312</span> </span><span class="PUNC">{</span><span class="STRN">'idRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">idRegexp</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>313</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>314</span>
-<span class='linenumber'>315</span>
-<span class='linenumber'>316</span> </span><span class="COMM">/**
-<span class='linenumber'>317</span> * Create a filter which suppresses errors by inverting another filter.
-<span class='linenumber'>318</span> * @param {!bidichecker.Filter} filter The subfilter.
-<span class='linenumber'>319</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>320</span> * @export
-<span class='linenumber'>321</span> */</span><span class="WHIT">
-<span class='linenumber'>322</span> </span><span class="NAME">bidichecker.FilterFactory.not</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>323</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'filter'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>324</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>325</span>
-<span class='linenumber'>326</span>
-<span class='linenumber'>327</span> </span><span class="COMM">/**
-<span class='linenumber'>328</span> * Create a filter which suppresses errors by or-ing component filters.
-<span class='linenumber'>329</span> * @param {!bidichecker.Filter} filter1 The first subfilter.
-<span class='linenumber'>330</span> * @param {!bidichecker.Filter} filter2 The second subfilter.
-<span class='linenumber'>331</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>332</span> * @export
-<span class='linenumber'>333</span> */</span><span class="WHIT">
-<span class='linenumber'>334</span> </span><span class="NAME">bidichecker.FilterFactory.or</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>335</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>336</span> </span><span class="PUNC">{</span><span class="STRN">'filter1'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>337</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>338</span>
-<span class='linenumber'>339</span>
-<span class='linenumber'>340</span> </span><span class="COMM">/**
-<span class='linenumber'>341</span> * Create a filter which suppresses errors based on a literal match of their
-<span class='linenumber'>342</span> * <code>precededByText</code> fields.
-<span class='linenumber'>343</span> * @param {?string} precededByText A string which must match the entire {@code
-<span class='linenumber'>344</span> * precededByText} field. If empty or null, will only match an empty or null
-<span class='linenumber'>345</span> * <code>precededByText</code>.
-<span class='linenumber'>346</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>347</span> * @export
-<span class='linenumber'>348</span> */</span><span class="WHIT">
-<span class='linenumber'>349</span> </span><span class="NAME">bidichecker.FilterFactory.precededByText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">precededByText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>350</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>351</span> </span><span class="PUNC">{</span><span class="STRN">'precededByText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">precededByText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>352</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>353</span>
-<span class='linenumber'>354</span>
-<span class='linenumber'>355</span> </span><span class="COMM">/**
-<span class='linenumber'>356</span> * Create a filter which suppresses errors by applying a regular expression to
-<span class='linenumber'>357</span> * their <code>precededByText</code> fields.
-<span class='linenumber'>358</span> * @param {string|RegExp} precededByTextRegexp A regular expression, which must
-<span class='linenumber'>359</span> * match the entire <code>precededByText</code> field. If empty or null, will
-<span class='linenumber'>360</span> * only match an empty or null <code>precededByText</code>.
-<span class='linenumber'>361</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>362</span> * @export
-<span class='linenumber'>363</span> */</span><span class="WHIT">
-<span class='linenumber'>364</span> </span><span class="NAME">bidichecker.FilterFactory.precededByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>365</span> </span><span class="NAME">precededByTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>366</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>367</span> </span><span class="PUNC">{</span><span class="STRN">'precededByTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">precededByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>368</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>369</span>
-<span class='linenumber'>370</span>
-<span class='linenumber'>371</span> </span><span class="COMM">/**
-<span class='linenumber'>372</span> * Create a filter which suppresses errors based on their severity levels.
-<span class='linenumber'>373</span> * @param {number} severityThreshold the severity level from which errors should
-<span class='linenumber'>374</span> * be suppressed. At level 1, all messages will be filtered out. Note that
-<span class='linenumber'>375</span> * higher values indicate lower severities.
-<span class='linenumber'>376</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>377</span> * @export
-<span class='linenumber'>378</span> */</span><span class="WHIT">
-<span class='linenumber'>379</span> </span><span class="NAME">bidichecker.FilterFactory.severityFrom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">severityThreshold</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>380</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>381</span> </span><span class="PUNC">{</span><span class="STRN">'severityThreshold'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">severityThreshold</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>382</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>383</span>
-<span class='linenumber'>384</span>
-<span class='linenumber'>385</span> </span><span class="COMM">/**
-<span class='linenumber'>386</span> * Create a filter which suppresses errors based on their type fields.
-<span class='linenumber'>387</span> * @param {string} type The error type name to be matched exactly.
-<span class='linenumber'>388</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
-<span class='linenumber'>389</span> * @export
-<span class='linenumber'>390</span> */</span><span class="WHIT">
-<span class='linenumber'>391</span> </span><span class="NAME">bidichecker.FilterFactory.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>392</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'type'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>393</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>394</span>
-<span class='linenumber'>395</span>
-<span class='linenumber'>396</span> </span><span class="COMM">/**
-<span class='linenumber'>397</span> * Checks that a required field exists in an object representing a filter, or
-<span class='linenumber'>398</span> * else throws a string exception.
-<span class='linenumber'>399</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>400</span> * @param {string} field The name of the field.
-<span class='linenumber'>401</span> * @private
-<span class='linenumber'>402</span> */</span><span class="WHIT">
-<span class='linenumber'>403</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>404</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">field</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>405</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'No \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter found for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>406</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>407</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>408</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>409</span>
-<span class='linenumber'>410</span>
-<span class='linenumber'>411</span> </span><span class="COMM">/**
-<span class='linenumber'>412</span> * Checks that a required field of a given type exists in an object representing
-<span class='linenumber'>413</span> * a filter, or else throws a string exception.
-<span class='linenumber'>414</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>415</span> * @param {string} field The name of the field.
-<span class='linenumber'>416</span> * @param {string} type The required type of the field.
-<span class='linenumber'>417</span> * @private
-<span class='linenumber'>418</span> */</span><span class="WHIT">
-<span class='linenumber'>419</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>420</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>421</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>422</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Wrong type for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>423</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter; expected '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>424</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>425</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>426</span>
-<span class='linenumber'>427</span>
-<span class='linenumber'>428</span> </span><span class="COMM">/**
-<span class='linenumber'>429</span> * Reads a string-valued field from an object representing a filter.
-<span class='linenumber'>430</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>431</span> * @param {string} field The name of the field.
-<span class='linenumber'>432</span> * @return {string} The field value.
-<span class='linenumber'>433</span> * @private
-<span class='linenumber'>434</span> */</span><span class="WHIT">
-<span class='linenumber'>435</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>436</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>437</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {string} */</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>438</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>439</span>
-<span class='linenumber'>440</span>
-<span class='linenumber'>441</span> </span><span class="COMM">/**
-<span class='linenumber'>442</span> * Reads a number-valued field from an object representing a filter.
-<span class='linenumber'>443</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>444</span> * @param {string} field The name of the field.
-<span class='linenumber'>445</span> * @return {number} The field value.
-<span class='linenumber'>446</span> * @private
-<span class='linenumber'>447</span> */</span><span class="WHIT">
-<span class='linenumber'>448</span> </span><span class="NAME">bidichecker.FilterFactory.getNumberParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>449</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'number'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>450</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {number} */</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>451</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>452</span>
-<span class='linenumber'>453</span>
-<span class='linenumber'>454</span> </span><span class="COMM">/**
-<span class='linenumber'>455</span> * Reads a regular expression field from an object representing a filter.
-<span class='linenumber'>456</span> * The field contents must be a string or a RegExp object.
-<span class='linenumber'>457</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>458</span> * @param {string} fieldName The name of the field.
-<span class='linenumber'>459</span> * @return {!RegExp} A regular expression anchored at both ends of the string.
-<span class='linenumber'>460</span> * @private
-<span class='linenumber'>461</span> */</span><span class="WHIT">
-<span class='linenumber'>462</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>463</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>464</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">fieldName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>465</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pattern</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>466</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>467</span> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {string} */</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>468</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">field</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>469</span> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">field.source</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>470</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>471</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Wrong type for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>472</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter; expected string or RegExp'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>473</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>474</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'^('</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">')$'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>475</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>476</span>
-<span class='linenumber'>477</span>
-<span class='linenumber'>478</span> </span><span class="COMM">/**
-<span class='linenumber'>479</span> * Reads a field representing a subfilter from an object representing a filter.
-<span class='linenumber'>480</span> * The field contents can either be a bare object representing a serialized
-<span class='linenumber'>481</span> * filter, or an object supporting an <code>isSuppressed()</code> method.
-<span class='linenumber'>482</span> * @param {!Object} bareObject The object representing the filter.
-<span class='linenumber'>483</span> * @param {string} field The name of the field.
-<span class='linenumber'>484</span> * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter constructed
-<span class='linenumber'>485</span> * from the field's contents.
-<span class='linenumber'>486</span> * @private
-<span class='linenumber'>487</span> */</span><span class="WHIT">
-<span class='linenumber'>488</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>489</span> </span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>490</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>491</span>
-<span class='linenumber'>492</span> </span><span class="COMM">// Recursively build any subfilters referred to by this one.</span><span class="WHIT">
-<span class='linenumber'>493</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>494</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subfilterObject</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>495</span> </span><span class="COMM">// Found a constructed filter object.</span><span class="WHIT">
-<span class='linenumber'>496</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>497</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>498</span> </span><span class="COMM">// Found a raw filter object.</span><span class="WHIT">
-<span class='linenumber'>499</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.constructFilter</span><span class="PUNC">(</span><span class="NAME">subfilterObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>500</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>501</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Can\'t make a filter out of the \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
-<span class='linenumber'>502</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter'</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>503</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>504</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>505</span>
-<span class='linenumber'>506</span>
-<span class='linenumber'>507</span> </span><span class="COMM">/**
-<span class='linenumber'>508</span> * A filter which suppresses errors by and-ing component filters.
-<span class='linenumber'>509</span> * @param {!Object} bareObject An object containing 'filter1' and 'filter2'
-<span class='linenumber'>510</span> * fields, each containing a bare object representing a component filter.
-<span class='linenumber'>511</span> * @constructor
-<span class='linenumber'>512</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>513</span> * @private
-<span class='linenumber'>514</span> */</span><span class="WHIT">
-<span class='linenumber'>515</span> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>516</span> </span><span class="COMM">/**
-<span class='linenumber'>517</span> * @type {!bidichecker.Filter}
-<span class='linenumber'>518</span> * @private
-<span class='linenumber'>519</span> */</span><span class="WHIT">
-<span class='linenumber'>520</span> </span><span class="NAME">this.filter1_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>521</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>522</span>
-<span class='linenumber'>523</span> </span><span class="COMM">/**
-<span class='linenumber'>524</span> * @type {!bidichecker.Filter}
-<span class='linenumber'>525</span> * @private
-<span class='linenumber'>526</span> */</span><span class="WHIT">
-<span class='linenumber'>527</span> </span><span class="NAME">this.filter2_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>528</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>529</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>530</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>531</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>532</span>
-<span class='linenumber'>533</span>
-<span class='linenumber'>534</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>535</span> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>536</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>537</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.filter1_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
-<span class='linenumber'>538</span> </span><span class="NAME">this.filter2_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>539</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>540</span>
-<span class='linenumber'>541</span>
-<span class='linenumber'>542</span> </span><span class="COMM">/**
-<span class='linenumber'>543</span> * A filter which suppresses errors by a literal match of their <code>atText</code>
-<span class='linenumber'>544</span> * fields.
-<span class='linenumber'>545</span> * @param {!Object} bareObject An object containing an 'atText' field, which
-<span class='linenumber'>546</span> * must match the entire <code>atText</code> field value. If empty, will only
-<span class='linenumber'>547</span> * match an empty or null <code>atText</code>.
-<span class='linenumber'>548</span> * @constructor
-<span class='linenumber'>549</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>550</span> * @private
-<span class='linenumber'>551</span> */</span><span class="WHIT">
-<span class='linenumber'>552</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>553</span> </span><span class="COMM">/**
-<span class='linenumber'>554</span> * @type {string}
-<span class='linenumber'>555</span> * @private
-<span class='linenumber'>556</span> */</span><span class="WHIT">
-<span class='linenumber'>557</span> </span><span class="NAME">this.atText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>558</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'atText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>559</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>560</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>561</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>562</span>
-<span class='linenumber'>563</span>
-<span class='linenumber'>564</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>565</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>566</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>567</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.atText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getAtText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>568</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>569</span>
-<span class='linenumber'>570</span>
-<span class='linenumber'>571</span> </span><span class="COMM">/**
-<span class='linenumber'>572</span> * A filter which suppresses errors by applying a regular expression to their
-<span class='linenumber'>573</span> * <code>atText</code> fields.
-<span class='linenumber'>574</span> * @param {!Object} bareObject An object containing an 'atTextRegexp' field
-<span class='linenumber'>575</span> * containing a regular expression, which must match the entire {@code
-<span class='linenumber'>576</span> * atText} field value. If empty, will only match an empty or null {@code
-<span class='linenumber'>577</span> * atText}.
-<span class='linenumber'>578</span> * @constructor
-<span class='linenumber'>579</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>580</span> * @private
-<span class='linenumber'>581</span> */</span><span class="WHIT">
-<span class='linenumber'>582</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>583</span> </span><span class="COMM">/**
-<span class='linenumber'>584</span> * @type {!RegExp}
-<span class='linenumber'>585</span> * @private
-<span class='linenumber'>586</span> */</span><span class="WHIT">
-<span class='linenumber'>587</span> </span><span class="NAME">this.atTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>588</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'atTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>589</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>590</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>591</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>592</span>
-<span class='linenumber'>593</span>
-<span class='linenumber'>594</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>595</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>596</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>597</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.atTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getAtText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>598</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>599</span>
-<span class='linenumber'>600</span>
-<span class='linenumber'>601</span> </span><span class="COMM">/**
-<span class='linenumber'>602</span> * A filter which suppresses errors by a literal match of their {@code
-<span class='linenumber'>603</span> * followedByText} fields.
-<span class='linenumber'>604</span> * @param {!Object} bareObject An object containing a 'followedByText' field,
-<span class='linenumber'>605</span> * which must match the entire <code>followedByText</code> field value. If empty,
-<span class='linenumber'>606</span> * will only match an empty or null <code>followedByText</code>.
-<span class='linenumber'>607</span> * @constructor
-<span class='linenumber'>608</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>609</span> * @private
-<span class='linenumber'>610</span> */</span><span class="WHIT">
-<span class='linenumber'>611</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>612</span> </span><span class="COMM">/**
-<span class='linenumber'>613</span> * @type {string}
-<span class='linenumber'>614</span> * @private
-<span class='linenumber'>615</span> */</span><span class="WHIT">
-<span class='linenumber'>616</span> </span><span class="NAME">this.followedByText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>617</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'followedByText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>618</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>619</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>620</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>621</span>
-<span class='linenumber'>622</span>
-<span class='linenumber'>623</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>624</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>625</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>626</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.followedByText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getFollowedByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>627</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>628</span>
-<span class='linenumber'>629</span>
-<span class='linenumber'>630</span> </span><span class="COMM">/**
-<span class='linenumber'>631</span> * A filter which suppresses errors by applying a regular expression to their
-<span class='linenumber'>632</span> * <code>followedByText</code> fields.
-<span class='linenumber'>633</span> * @param {!Object} bareObject An object containing a 'followedByTextRegexp'
-<span class='linenumber'>634</span> * field containing a regular expression, which must match the entire {@code
-<span class='linenumber'>635</span> * followedByText} field value. If empty, will only match an empty or null
-<span class='linenumber'>636</span> * <code>followedByText</code>.
-<span class='linenumber'>637</span> * @constructor
-<span class='linenumber'>638</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>639</span> * @private
-<span class='linenumber'>640</span> */</span><span class="WHIT">
-<span class='linenumber'>641</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>642</span> </span><span class="COMM">/**
-<span class='linenumber'>643</span> * @type {!RegExp}
-<span class='linenumber'>644</span> * @private
-<span class='linenumber'>645</span> */</span><span class="WHIT">
-<span class='linenumber'>646</span> </span><span class="NAME">this.followedByTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>647</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>648</span> </span><span class="STRN">'followedByTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>649</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>650</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>651</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>652</span>
-<span class='linenumber'>653</span>
-<span class='linenumber'>654</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>655</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>656</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>657</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.followedByTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getFollowedByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>658</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>659</span>
-<span class='linenumber'>660</span>
-<span class='linenumber'>661</span> </span><span class="COMM">/**
-<span class='linenumber'>662</span> * A filter which suppresses errors by a literal match of the error location's
-<span class='linenumber'>663</span> * (or one of its DOM ancestors') <code>class</code> name.
-<span class='linenumber'>664</span> * @param {!Object} bareObject An object containing a 'className' field, which
-<span class='linenumber'>665</span> * must match one of the class names in the <code>class</code> attribute of the
-<span class='linenumber'>666</span> * location or one of its ancestors.
-<span class='linenumber'>667</span> * @constructor
-<span class='linenumber'>668</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>669</span> * @private
-<span class='linenumber'>670</span> */</span><span class="WHIT">
-<span class='linenumber'>671</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>672</span> </span><span class="COMM">/**
-<span class='linenumber'>673</span> * @type {string}
-<span class='linenumber'>674</span> * @private
-<span class='linenumber'>675</span> */</span><span class="WHIT">
-<span class='linenumber'>676</span> </span><span class="NAME">this.className_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>677</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'className'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>678</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>679</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>680</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>681</span>
-<span class='linenumber'>682</span>
-<span class='linenumber'>683</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>684</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>685</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>686</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>687</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>688</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>689</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>690</span> </span><span class="COMM">// Match each whitespace-separated class name separately.</span><span class="WHIT">
-<span class='linenumber'>691</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.className.split</span><span class="PUNC">(</span><span class="REGX">/\s/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>692</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">classNames.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>693</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.className_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>694</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>695</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>696</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>697</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>698</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>699</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>700</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>701</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>702</span>
-<span class='linenumber'>703</span>
-<span class='linenumber'>704</span> </span><span class="COMM">/**
-<span class='linenumber'>705</span> * A filter which suppresses errors by applying a regular expression to the
-<span class='linenumber'>706</span> * error location's (or one of its DOM ancestors') <code>class</code> name.
-<span class='linenumber'>707</span> * @param {!Object} bareObject An object containing a 'classRegexp' field,
-<span class='linenumber'>708</span> * containing a regular expression which must match one of the class names
-<span class='linenumber'>709</span> * in the <code>class</code> attribute of the location or one of its ancestors.
-<span class='linenumber'>710</span> * @constructor
-<span class='linenumber'>711</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>712</span> * @private
-<span class='linenumber'>713</span> */</span><span class="WHIT">
-<span class='linenumber'>714</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>715</span> </span><span class="COMM">/**
-<span class='linenumber'>716</span> * @type {!RegExp}
-<span class='linenumber'>717</span> * @private
-<span class='linenumber'>718</span> */</span><span class="WHIT">
-<span class='linenumber'>719</span> </span><span class="NAME">this.classRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>720</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'classRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>721</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>722</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>723</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>724</span>
-<span class='linenumber'>725</span>
-<span class='linenumber'>726</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>727</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>728</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>729</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>730</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>731</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>732</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>733</span> </span><span class="COMM">// Match each whitespace-separated class name separately.</span><span class="WHIT">
-<span class='linenumber'>734</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.className.split</span><span class="PUNC">(</span><span class="REGX">/\s/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>735</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">classNames.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>736</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.classRegexp_.test</span><span class="PUNC">(</span><span class="NAME">classNames</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>737</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>738</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>739</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>740</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>741</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>742</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>743</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>744</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>745</span>
-<span class='linenumber'>746</span>
-<span class='linenumber'>747</span> </span><span class="COMM">/**
-<span class='linenumber'>748</span> * A filter which suppresses errors by a literal match of the error location's
-<span class='linenumber'>749</span> * (or one of its DOM ancestors') <code>id</code> attribute.
-<span class='linenumber'>750</span> * @param {!Object} bareObject An object containing an 'id' field, which must
-<span class='linenumber'>751</span> * match the <code>id</code> attribute of the location or one of its ancestors.
-<span class='linenumber'>752</span> * @constructor
-<span class='linenumber'>753</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>754</span> * @private
-<span class='linenumber'>755</span> */</span><span class="WHIT">
-<span class='linenumber'>756</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>757</span> </span><span class="COMM">/**
-<span class='linenumber'>758</span> * @type {string}
-<span class='linenumber'>759</span> * @private
-<span class='linenumber'>760</span> */</span><span class="WHIT">
-<span class='linenumber'>761</span> </span><span class="NAME">this.id_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'id'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>762</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>763</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>764</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>765</span>
-<span class='linenumber'>766</span>
-<span class='linenumber'>767</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>768</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>769</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>770</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>771</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>772</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>773</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.id_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">current.id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>774</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>775</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>776</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>777</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>778</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>779</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>780</span>
-<span class='linenumber'>781</span>
-<span class='linenumber'>782</span> </span><span class="COMM">/**
-<span class='linenumber'>783</span> * A filter which suppresses errors by applying a regular expression to the
-<span class='linenumber'>784</span> * error location's (or one of its DOM ancestors') <code>id</code> attribute.
-<span class='linenumber'>785</span> * @param {!Object} bareObject An object containing an 'idRegexp' field
-<span class='linenumber'>786</span> * containing a regular expression, which must match the <code>id</code>
-<span class='linenumber'>787</span> * attribute of the location or one of its ancestors.
-<span class='linenumber'>788</span> * @constructor
-<span class='linenumber'>789</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>790</span> * @private
-<span class='linenumber'>791</span> */</span><span class="WHIT">
-<span class='linenumber'>792</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>793</span> </span><span class="COMM">/**
-<span class='linenumber'>794</span> * @type {!RegExp}
-<span class='linenumber'>795</span> * @private
-<span class='linenumber'>796</span> */</span><span class="WHIT">
-<span class='linenumber'>797</span> </span><span class="NAME">this.idRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>798</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'idRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>799</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>800</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>801</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>802</span>
-<span class='linenumber'>803</span>
-<span class='linenumber'>804</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>805</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>806</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>807</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>808</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>809</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>810</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.idRegexp_.test</span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>811</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>812</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>813</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>814</span> </span><span class="PUNC">}</span><span class="WHIT">
-<span class='linenumber'>815</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>816</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>817</span>
-<span class='linenumber'>818</span>
-<span class='linenumber'>819</span> </span><span class="COMM">/**
-<span class='linenumber'>820</span> * A filter which suppresses errors by inverting another filter.
-<span class='linenumber'>821</span> * @param {!Object} bareObject An object containing a 'filter' field, containing
-<span class='linenumber'>822</span> * a bare object representing a component filter.
-<span class='linenumber'>823</span> * @constructor
-<span class='linenumber'>824</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>825</span> * @private
-<span class='linenumber'>826</span> */</span><span class="WHIT">
-<span class='linenumber'>827</span> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>828</span> </span><span class="COMM">/**
-<span class='linenumber'>829</span> * @type {!bidichecker.Filter}
-<span class='linenumber'>830</span> * @private
-<span class='linenumber'>831</span> */</span><span class="WHIT">
-<span class='linenumber'>832</span> </span><span class="NAME">this.filter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>833</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>834</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>835</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>836</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>837</span>
-<span class='linenumber'>838</span>
-<span class='linenumber'>839</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>840</span> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>841</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>842</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.filter_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>843</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>844</span>
-<span class='linenumber'>845</span>
-<span class='linenumber'>846</span> </span><span class="COMM">/**
-<span class='linenumber'>847</span> * A filter which suppresses errors by or-ing component filters.
-<span class='linenumber'>848</span> * @param {!Object} bareObject An object containing 'filter1' and 'filter2'
-<span class='linenumber'>849</span> * fields, each containing a bare object representing a component filter.
-<span class='linenumber'>850</span> * @constructor
-<span class='linenumber'>851</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>852</span> * @private
-<span class='linenumber'>853</span> */</span><span class="WHIT">
-<span class='linenumber'>854</span> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>855</span> </span><span class="COMM">/**
-<span class='linenumber'>856</span> * @type {!bidichecker.Filter}
-<span class='linenumber'>857</span> * @private
-<span class='linenumber'>858</span> */</span><span class="WHIT">
-<span class='linenumber'>859</span> </span><span class="NAME">this.filter1_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>860</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>861</span>
-<span class='linenumber'>862</span> </span><span class="COMM">/**
-<span class='linenumber'>863</span> * @type {!bidichecker.Filter}
-<span class='linenumber'>864</span> * @private
-<span class='linenumber'>865</span> */</span><span class="WHIT">
-<span class='linenumber'>866</span> </span><span class="NAME">this.filter2_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>867</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>868</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>869</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>870</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>871</span>
-<span class='linenumber'>872</span>
-<span class='linenumber'>873</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>874</span> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>875</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>876</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.filter1_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
-<span class='linenumber'>877</span> </span><span class="NAME">this.filter2_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>878</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>879</span>
-<span class='linenumber'>880</span>
-<span class='linenumber'>881</span> </span><span class="COMM">/**
-<span class='linenumber'>882</span> * A filter which suppresses errors by a literal match of their {@code
-<span class='linenumber'>883</span> * precededByText} fields.
-<span class='linenumber'>884</span> * @param {!Object} bareObject An object containing a 'precededByText' field,
-<span class='linenumber'>885</span> * which must match the entire <code>precededByText</code> field value. If empty,
-<span class='linenumber'>886</span> * will only match an empty or null <code>precededByText</code>.
-<span class='linenumber'>887</span> * @constructor
-<span class='linenumber'>888</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>889</span> * @private
-<span class='linenumber'>890</span> */</span><span class="WHIT">
-<span class='linenumber'>891</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>892</span> </span><span class="COMM">/**
-<span class='linenumber'>893</span> * @type {string}
-<span class='linenumber'>894</span> * @private
-<span class='linenumber'>895</span> */</span><span class="WHIT">
-<span class='linenumber'>896</span> </span><span class="NAME">this.precededByText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>897</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'precededByText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>898</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>899</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>900</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>901</span>
-<span class='linenumber'>902</span>
-<span class='linenumber'>903</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>904</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>905</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>906</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.precededByText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getPrecededByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>907</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>908</span>
-<span class='linenumber'>909</span>
-<span class='linenumber'>910</span> </span><span class="COMM">/**
-<span class='linenumber'>911</span> * A filter which suppresses errors by applying a regular expression to their
-<span class='linenumber'>912</span> * <code>precededByText</code> fields.
-<span class='linenumber'>913</span> * @param {!Object} bareObject An object containing a 'precededByTextRegexp'
-<span class='linenumber'>914</span> * field containing a regular expression, which must match the entire
-<span class='linenumber'>915</span> * precededByText field value. If empty, will only match an empty or null
-<span class='linenumber'>916</span> * <code>precededByText</code>.
-<span class='linenumber'>917</span> * @constructor
-<span class='linenumber'>918</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>919</span> * @private
-<span class='linenumber'>920</span> */</span><span class="WHIT">
-<span class='linenumber'>921</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>922</span> </span><span class="COMM">/**
-<span class='linenumber'>923</span> * @type {!RegExp}
-<span class='linenumber'>924</span> * @private
-<span class='linenumber'>925</span> */</span><span class="WHIT">
-<span class='linenumber'>926</span> </span><span class="NAME">this.precededByTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>927</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>928</span> </span><span class="STRN">'precededByTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>929</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>930</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>931</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>932</span>
-<span class='linenumber'>933</span>
-<span class='linenumber'>934</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>935</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
-<span class='linenumber'>936</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>937</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.precededByTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getPrecededByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>938</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>939</span>
-<span class='linenumber'>940</span>
-<span class='linenumber'>941</span> </span><span class="COMM">/**
-<span class='linenumber'>942</span> * A filter which suppresses errors based on their severity fields.
-<span class='linenumber'>943</span> * @param {!Object} bareObject An object containing an integer-valued
-<span class='linenumber'>944</span> * 'severityThreshold' field representing the threshold severity value for
-<span class='linenumber'>945</span> * suppression.
-<span class='linenumber'>946</span> * @constructor
-<span class='linenumber'>947</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>948</span> * @private
-<span class='linenumber'>949</span> */</span><span class="WHIT">
-<span class='linenumber'>950</span> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>951</span> </span><span class="COMM">/**
-<span class='linenumber'>952</span> * @type {number}
-<span class='linenumber'>953</span> * @private
-<span class='linenumber'>954</span> */</span><span class="WHIT">
-<span class='linenumber'>955</span> </span><span class="NAME">this.severityThreshold_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getNumberParam_</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>956</span> </span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'severityThreshold'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>957</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>958</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>959</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>960</span>
-<span class='linenumber'>961</span>
-<span class='linenumber'>962</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>963</span> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>964</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>965</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.severityThreshold_</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">error.getSeverity</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>966</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>967</span>
-<span class='linenumber'>968</span>
-<span class='linenumber'>969</span> </span><span class="COMM">/**
-<span class='linenumber'>970</span> * A filter which suppresses errors based on their type fields.
-<span class='linenumber'>971</span> * @param {!Object} bareObject An object containing a string-valued 'type' field
-<span class='linenumber'>972</span> * which must exactly match the error type value.
-<span class='linenumber'>973</span> * @constructor
-<span class='linenumber'>974</span> * @extends {bidichecker.FilterFactory.ComposableFilter_}
-<span class='linenumber'>975</span> * @private
-<span class='linenumber'>976</span> */</span><span class="WHIT">
-<span class='linenumber'>977</span> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>978</span> </span><span class="COMM">/**
-<span class='linenumber'>979</span> * @type {string}
-<span class='linenumber'>980</span> * @private
-<span class='linenumber'>981</span> */</span><span class="WHIT">
-<span class='linenumber'>982</span> </span><span class="NAME">this.type_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'type'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>983</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>984</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">,</span><span class="WHIT">
-<span class='linenumber'>985</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter_</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>986</span>
-<span class='linenumber'>987</span>
-<span class='linenumber'>988</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
-<span class='linenumber'>989</span> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
-<span class='linenumber'>990</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
-<span class='linenumber'>991</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.type_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">error.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>992</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
-<span class='linenumber'>993</span> </span></pre></body></html>
\ No newline at end of file
diff --git a/docs/jsdoc/function.gif b/docs/jsdoc/function.gif
new file mode 100644
index 0000000..be00b96
--- /dev/null
+++ b/docs/jsdoc/function.gif
Binary files differ
diff --git a/docs/jsdoc/globals.html b/docs/jsdoc/globals.html
deleted file mode 100644
index 61a3aac..0000000
--- a/docs/jsdoc/globals.html
+++ /dev/null
@@ -1,982 +0,0 @@
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>JsDoc: GLOBALS</title>
- <style type="text/css">
- body { background-color: #FFFFFF; }
- .TableHeadingColor { background: #CCCCFF; }
- .TableSubHeadingColor { background: #EEEEFF; }
- .TableRowColor { background: #FFFFFF; }
-
- .FrameTitleFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .FrameHeadingFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .FrameItemFont
- {
- font-size: 10pts;
- font-family: Helvetica, Arial, san-serif;
- }
-
- .NavBar
- {
- font-family: Arial, Helvetica, sans-serif;
- background-color: #FFFFFF;
- }
-
- .jsdoc_ctime
- {
- font-family: Arial, Helvetica, sans-serif;
- font-size: 9pt;
- text-align: right;
- }
- </style>
-</head>
-
-<body>
-
-<table style="width: 100%">
-<tr>
-<td class="NavBar" valign="top"><font size="-2">SUMMARY: <a href="#field_summary">FIELD</a> | <a href="#constructor_summary">CONSTR</a> | <a href="#method_summary">METHOD</a></font></td>
-<td class="NavBar" valign="top"><font size="-2">DETAIL: <a href="#field_detail">FIELD</a> | <a href="#constructor_detail">CONSTR</a> | <a href="#method_detail">METHOD</a></font></td>
-</tr>
-</table>
-
-<hr>
-
-<h2>Static Class GLOBALS</h2>
-
-
-
-
-
-<hr>
-
-<!-- =========== FIELD SUMMARY =========== -->
-
-<!-- =========== END FIELD SUMMARY =========== -->
-
-
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<a name="method_summary"> </a>
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
- <tr bgcolor="#CCCCFF" class="TableHeadingColor">
- <td colspan=2>
- <font size="+2"> <b>Method Summary</b></font>
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !Array.<!bidichecker.Error>
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.checkPage">bidichecker.checkPage</a></b>(shouldBeRtl, opt_element, opt_filters) </code>
- <br>
- Checks the contents of the current web page, including all nested frames, for
-BiDi-related errors.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- string
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.checkPageToJson">bidichecker.checkPageToJson</a></b>(shouldBeRtl, opt_element, opt_filtersJson) </code>
- <br>
- JSON interface to <code>checkPage</code>.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.and">bidichecker.FilterFactory.and</a></b>(filter1, filter2) </code>
- <br>
- Create a filter which suppresses errors by and-ing component filters.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.atText">bidichecker.FilterFactory.atText</a></b>(atText) </code>
- <br>
- Create a filter which suppresses errors based on a literal match of their
-<code>atText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.atTextRegexp">bidichecker.FilterFactory.atTextRegexp</a></b>(atTextRegexp) </code>
- <br>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>atText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.constructFilter">bidichecker.FilterFactory.constructFilter</a></b>(bareFilter) </code>
- <br>
- Constructs a suppression filter from a bare object with suitable contents.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.followedByText">bidichecker.FilterFactory.followedByText</a></b>(followedByText) </code>
- <br>
- Create a filter which suppresses errors based on a literal match of their
-<code>followedByText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.followedByTextRegexp">bidichecker.FilterFactory.followedByTextRegexp</a></b>(followedByTextRegexp) </code>
- <br>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>followedByText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.locationClass">bidichecker.FilterFactory.locationClass</a></b>(className) </code>
- <br>
- Create a filter which suppresses errors based on a literal match of one of
-the class names of any parent node of the error location in the DOM.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.locationClassRegexp">bidichecker.FilterFactory.locationClassRegexp</a></b>(classRegexp) </code>
- <br>
- Create a filter which suppresses errors based on a regular expression match
-of one of the class names of any parent node of the error location in the
-DOM.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.locationId">bidichecker.FilterFactory.locationId</a></b>(id) </code>
- <br>
- Create a filter which suppresses errors based on a literal match of the error
-location's (or one of its DOM ancestors') <code>id</code> attribute.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.locationIdRegexp">bidichecker.FilterFactory.locationIdRegexp</a></b>(idRegexp) </code>
- <br>
- Create a filter which suppresses errors by applying a regular expression to
-the error location's (or one of its DOM ancestors') <code>id</code> attribute.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.not">bidichecker.FilterFactory.not</a></b>(filter) </code>
- <br>
- Create a filter which suppresses errors by inverting another filter.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.or">bidichecker.FilterFactory.or</a></b>(filter1, filter2) </code>
- <br>
- Create a filter which suppresses errors by or-ing component filters.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.precededByText">bidichecker.FilterFactory.precededByText</a></b>(precededByText) </code>
- <br>
- Create a filter which suppresses errors based on a literal match of their
-<code>precededByText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.precededByTextRegexp">bidichecker.FilterFactory.precededByTextRegexp</a></b>(precededByTextRegexp) </code>
- <br>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>precededByText</code> fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- Array.<!bidichecker.Filter>
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.readFiltersFromJson">bidichecker.FilterFactory.readFiltersFromJson</a></b>(opt_filtersJson) </code>
- <br>
- Deserializes a list of suppression filters from a JSON-format string.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.severityFrom">bidichecker.FilterFactory.severityFrom</a></b>(severityThreshold) </code>
- <br>
- Create a filter which suppresses errors based on their severity levels.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static>
- !bidichecker.FilterFactory.ComposableFilter_
- </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.FilterFactory.type">bidichecker.FilterFactory.type</a></b>(type) </code>
- <br>
- Create a filter which suppresses errors based on their type fields.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static> </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.runGui">bidichecker.runGui</a></b>(errors) </code>
- <br>
- Runs the interactive visual error browsing mode.
-
- </td>
- </tr>
-
- <tr bgcolor="white" class="TableRowColor">
- <td align="right" valign="top" width="1%">
- <font size="-1"><code><static> </code></font>
- </td>
- <td>
- <code> <b> <a href="#bidichecker.runGuiFromJson">bidichecker.runGuiFromJson</a></b>(errorsJson) </code>
- <br>
- JSON interface to <code>runGui</code>.
-
- </td>
- </tr>
-
-</table>
-
-
-<!-- ========== EVENT SUMMARY =========== -->
-
-<!-- ========== INHERITED METHODS SUMMARY =========== -->
-
-<br/>
-
-<!-- ========== END INHERITED METHODS SUMMARY =========== -->
-
-<!-- ============ FIELD DETAIL START ========= -->
-
-<!-- ============ FIELD DETAIL END ========== -->
-
-
-
-<!-- ============ METHOD DETAIL START ======= -->
-
-<a name="method_detail"> </a>
-<table border="1" cellpadding="3" cellspacing="0" width="100%">
- <tr bgcolor="#CCCCFF" class="TableHeadingColor">
- <td colspan=1>
- <font size="+2"> <b>Method Detail</b></font>
- </td>
- </tr>
-</table>
-
-
- <a name="bidichecker.checkPage"> </a> <h3>bidichecker.checkPage</h3>
- <pre><static> !Array.<!bidichecker.Error> <b>bidichecker.checkPage</b>(shouldBeRtl, opt_element, opt_filters)</pre>
- <ul>
- Checks the contents of the current web page, including all nested frames, for
-BiDi-related errors. If <code>opt_element</code> is specified, checks only within
-the given element of the DOM (including any nested frames). This is the main
-entry point for the Javascript API.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>boolean</i> shouldBeRtl </code> - Is the root expected to be right-to-left?
- </ul>
- <ul>
- <code><i>Element=</i> opt_element </code> - The root element of the DOM subtree to be
- checked; if null, checks the entire current web page.
- </ul>
- <ul>
- <code><i>Array.<!bidichecker.Filter>=</i> opt_filters </code> - Error suppression filters.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!Array.<!bidichecker.Error></i> </code>Array of error objects for all failing
- checks.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.checkPageToJson"> </a> <h3>bidichecker.checkPageToJson</h3>
- <pre><static> string <b>bidichecker.checkPageToJson</b>(shouldBeRtl, opt_element, opt_filtersJson)</pre>
- <ul>
- JSON interface to <code>checkPage</code>.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>boolean</i> shouldBeRtl </code> - Is the element/page expected to be
- right-to-left?
- </ul>
- <ul>
- <code><i>Element=</i> opt_element </code> - The root element of the DOM subtree to be
- checked; if null, checks the entire current web page.
- </ul>
- <ul>
- <code><i>string=</i> opt_filtersJson </code> - Error suppression filters in a JSON string.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>string</i> </code>Array of <code>bidichecker.Error</code> objects for all failing
- checks, in JSON format. If no errors were found, returns an empty array
- ("[]").
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.and"> </a> <h3>bidichecker.FilterFactory.and</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.and</b>(filter1, filter2)</pre>
- <ul>
- Create a filter which suppresses errors by and-ing component filters.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>!bidichecker.Filter</i> filter1 </code> - The first subfilter.
- </ul>
- <ul>
- <code><i>!bidichecker.Filter</i> filter2 </code> - The second subfilter.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.atText"> </a> <h3>bidichecker.FilterFactory.atText</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.atText</b>(atText)</pre>
- <ul>
- Create a filter which suppresses errors based on a literal match of their
-<code>atText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>?string</i> atText </code> - A string which must match the entire <code>atText</code>
- field. If empty or null, will only match an empty or null <code>atText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.atTextRegexp"> </a> <h3>bidichecker.FilterFactory.atTextRegexp</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.atTextRegexp</b>(atTextRegexp)</pre>
- <ul>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>atText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string, RegExp</i> atTextRegexp </code> - A regular expression, which must match
- the entire <code>atText</code> field. If empty or null, will only match an
- empty or null <code>atText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.constructFilter"> </a> <h3>bidichecker.FilterFactory.constructFilter</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.constructFilter</b>(bareFilter)</pre>
- <ul>
- Constructs a suppression filter from a bare object with suitable contents.
-For use in deserializing filters from JSON. Throws a string exception if an
-invalid filter is encountered.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>!Object</i> bareFilter </code> - The object representing the filter. Must contain
- an <code>'opcode'</code> field with a string indicating the filter type.
- Other supported field names and types are dependent on the filter type.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>The new filter.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.followedByText"> </a> <h3>bidichecker.FilterFactory.followedByText</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.followedByText</b>(followedByText)</pre>
- <ul>
- Create a filter which suppresses errors based on a literal match of their
-<code>followedByText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>?string</i> followedByText </code> - A string which must match the entire {@code
- followedByText} field. If empty or null, will only match an empty or null
- <code>followedByText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.followedByTextRegexp"> </a> <h3>bidichecker.FilterFactory.followedByTextRegexp</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.followedByTextRegexp</b>(followedByTextRegexp)</pre>
- <ul>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>followedByText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string, RegExp</i> followedByTextRegexp </code> - A regular expression, which must
- match the entire <code>followedByText</code> field. If empty or null, will
- only match an empty or null <code>followedByText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.locationClass"> </a> <h3>bidichecker.FilterFactory.locationClass</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.locationClass</b>(className)</pre>
- <ul>
- Create a filter which suppresses errors based on a literal match of one of
-the class names of any parent node of the error location in the DOM.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string</i> className </code> - A string which must match one of the class names in
- the <code>class</code> attribute of the location or one of its ancestors. Must
- not be empty or null.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.locationClassRegexp"> </a> <h3>bidichecker.FilterFactory.locationClassRegexp</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.locationClassRegexp</b>(classRegexp)</pre>
- <ul>
- Create a filter which suppresses errors based on a regular expression match
-of one of the class names of any parent node of the error location in the
-DOM.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string, RegExp</i> classRegexp </code> - A regular expression, which must match
- one of the class names in the <code>class</code> attribute of the location or
- one of its ancestors. Must not be empty or null.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.locationId"> </a> <h3>bidichecker.FilterFactory.locationId</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.locationId</b>(id)</pre>
- <ul>
- Create a filter which suppresses errors based on a literal match of the error
-location's (or one of its DOM ancestors') <code>id</code> attribute.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string</i> id </code> - A string which must match the entire <code>id</code> attribute
- of the location or one of its ancestors. Must not be empty or null.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.locationIdRegexp"> </a> <h3>bidichecker.FilterFactory.locationIdRegexp</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.locationIdRegexp</b>(idRegexp)</pre>
- <ul>
- Create a filter which suppresses errors by applying a regular expression to
-the error location's (or one of its DOM ancestors') <code>id</code> attribute.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string, RegExp</i> idRegexp </code> - A regular expression, which must match the
- entire <code>id</code> attribute of the location or one of its ancestors. Must
- not be empty or null.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.not"> </a> <h3>bidichecker.FilterFactory.not</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.not</b>(filter)</pre>
- <ul>
- Create a filter which suppresses errors by inverting another filter.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>!bidichecker.Filter</i> filter </code> - The subfilter.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.or"> </a> <h3>bidichecker.FilterFactory.or</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.or</b>(filter1, filter2)</pre>
- <ul>
- Create a filter which suppresses errors by or-ing component filters.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>!bidichecker.Filter</i> filter1 </code> - The first subfilter.
- </ul>
- <ul>
- <code><i>!bidichecker.Filter</i> filter2 </code> - The second subfilter.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.precededByText"> </a> <h3>bidichecker.FilterFactory.precededByText</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.precededByText</b>(precededByText)</pre>
- <ul>
- Create a filter which suppresses errors based on a literal match of their
-<code>precededByText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>?string</i> precededByText </code> - A string which must match the entire {@code
- precededByText} field. If empty or null, will only match an empty or null
- <code>precededByText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.precededByTextRegexp"> </a> <h3>bidichecker.FilterFactory.precededByTextRegexp</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.precededByTextRegexp</b>(precededByTextRegexp)</pre>
- <ul>
- Create a filter which suppresses errors by applying a regular expression to
-their <code>precededByText</code> fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string, RegExp</i> precededByTextRegexp </code> - A regular expression, which must
- match the entire <code>precededByText</code> field. If empty or null, will
- only match an empty or null <code>precededByText</code>.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.readFiltersFromJson"> </a> <h3>bidichecker.FilterFactory.readFiltersFromJson</h3>
- <pre><static> Array.<!bidichecker.Filter> <b>bidichecker.FilterFactory.readFiltersFromJson</b>(opt_filtersJson)</pre>
- <ul>
- Deserializes a list of suppression filters from a JSON-format string.
-Throws a string exception if an unknown filter is encountered.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string=</i> opt_filtersJson </code> - The input string, if provided.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>Array.<!bidichecker.Filter></i> </code>The error suppression filters.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.severityFrom"> </a> <h3>bidichecker.FilterFactory.severityFrom</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.severityFrom</b>(severityThreshold)</pre>
- <ul>
- Create a filter which suppresses errors based on their severity levels.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>number</i> severityThreshold </code> - the severity level from which errors should
- be suppressed. At level 1, all messages will be filtered out. Note that
- higher values indicate lower severities.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.FilterFactory.type"> </a> <h3>bidichecker.FilterFactory.type</h3>
- <pre><static> !bidichecker.FilterFactory.ComposableFilter_ <b>bidichecker.FilterFactory.type</b>(type)</pre>
- <ul>
- Create a filter which suppresses errors based on their type fields.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string</i> type </code> - The error type name to be matched exactly.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
- <ul>
- <b>Returns:</b>
- <ul>
- <code><i>!bidichecker.FilterFactory.ComposableFilter_</i> </code>A filter object.
- </ul>
- </ul>
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.runGui"> </a> <h3>bidichecker.runGui</h3>
- <pre><static> <b>bidichecker.runGui</b>(errors)</pre>
- <ul>
- Runs the interactive visual error browsing mode.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>Array.<!bidichecker.Error></i> errors </code> - An array of errors to be
- displayed.
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
-
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
- <a name="bidichecker.runGuiFromJson"> </a> <h3>bidichecker.runGuiFromJson</h3>
- <pre><static> <b>bidichecker.runGuiFromJson</b>(errorsJson)</pre>
- <ul>
- JSON interface to <code>runGui</code>.
- </ul>
- <!-- METHOD PARAMETERS START -->
- <ul>
- <b>Parameters:</b>
- <ul>
- <code><i>string</i> errorsJson </code> - An array of errors to be displayed, in JSON
- format (similar to that produced by <code>checkPageJson()</code>).
- </ul>
- </ul>
- <!-- METHOD PARAMETERS END -->
- <!-- ADDITIONAL ATTRIBUTES START -->
-
-
- <!-- ADDITIONAL ATTRIBUTES END -->
- <hr>
-
-
-<!-- ============ METHOD DETAIL END ========== -->
-
-
-
-<!-- ============ EVENT DETAIL START ======= -->
-
-<!-- ============ EVENT DETAIL END ========== -->
-<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoctoolkit.org/" target="_parent">JsDoc Toolkit</a> 1.3.3 on Sun Oct 24 2010 14:05:39 GMT+0100 (IST)</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/jsdoc/index.html b/docs/jsdoc/index.html
index e788883..3df8e5b 100644
--- a/docs/jsdoc/index.html
+++ b/docs/jsdoc/index.html
@@ -7,7 +7,7 @@
<meta name="generator" content="JsDoc Toolkit 1.0">
</head>
<frameset cols="200,*">
- <frame name="menu" src="allclasses-frame.html">
+ <frame name="menu" src="file_list.html">
<frame name="main" src="splash.html">
</frameset>
</html>
\ No newline at end of file
diff --git a/docs/jsdoc/object.gif b/docs/jsdoc/object.gif
new file mode 100644
index 0000000..409b58e
--- /dev/null
+++ b/docs/jsdoc/object.gif
Binary files differ
diff --git a/docs/jsdoc/overview.gif b/docs/jsdoc/overview.gif
new file mode 100644
index 0000000..241c257
--- /dev/null
+++ b/docs/jsdoc/overview.gif
Binary files differ
diff --git a/docs/jsdoc/bidichecker.src.html b/docs/jsdoc/src_01.html
similarity index 100%
rename from docs/jsdoc/bidichecker.src.html
rename to docs/jsdoc/src_01.html
diff --git a/docs/jsdoc/src_02.html b/docs/jsdoc/src_02.html
new file mode 100644
index 0000000..adce873
--- /dev/null
+++ b/docs/jsdoc/src_02.html
@@ -0,0 +1,50 @@
+<html><head><style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .linenumber {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='linenumber'> 1</span> <span class="COMM">// Copyright 2009 Google Inc. All Rights Reserved.</span><span class="WHIT">
+<span class='linenumber'> 2</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 3</span> </span><span class="COMM">// Licensed under the Apache License, Version 2.0 (the "License");</span><span class="WHIT">
+<span class='linenumber'> 4</span> </span><span class="COMM">// you may not use this file except in compliance with the License.</span><span class="WHIT">
+<span class='linenumber'> 5</span> </span><span class="COMM">// You may obtain a copy of the License at</span><span class="WHIT">
+<span class='linenumber'> 6</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 7</span> </span><span class="COMM">// http://www.apache.org/licenses/LICENSE-2.0</span><span class="WHIT">
+<span class='linenumber'> 8</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 9</span> </span><span class="COMM">// Unless required by applicable law or agreed to in writing, software</span><span class="WHIT">
+<span class='linenumber'> 10</span> </span><span class="COMM">// distributed under the License is distributed on an "AS-IS" BASIS,</span><span class="WHIT">
+<span class='linenumber'> 11</span> </span><span class="COMM">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span><span class="WHIT">
+<span class='linenumber'> 12</span> </span><span class="COMM">// See the License for the specific language governing permissions and</span><span class="WHIT">
+<span class='linenumber'> 13</span> </span><span class="COMM">// limitations under the License.</span><span class="WHIT">
+<span class='linenumber'> 14</span>
+<span class='linenumber'> 15</span> </span><span class="COMM">/**
+<span class='linenumber'> 16</span> * @fileoverview Interface for error-suppression filters.
+<span class='linenumber'> 17</span> */</span><span class="WHIT">
+<span class='linenumber'> 18</span>
+<span class='linenumber'> 19</span>
+<span class='linenumber'> 20</span> </span><span class="NAME">goog.provide</span><span class="PUNC">(</span><span class="STRN">'bidichecker.Filter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 21</span>
+<span class='linenumber'> 22</span> </span><span class="NAME">goog.require</span><span class="PUNC">(</span><span class="STRN">'bidichecker.Error'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 23</span>
+<span class='linenumber'> 24</span>
+<span class='linenumber'> 25</span> </span><span class="COMM">/**
+<span class='linenumber'> 26</span> * Interface for an error-suppression filter.
+<span class='linenumber'> 27</span> * @interface
+<span class='linenumber'> 28</span> */</span><span class="WHIT">
+<span class='linenumber'> 29</span> </span><span class="NAME">bidichecker.Filter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 30</span>
+<span class='linenumber'> 31</span>
+<span class='linenumber'> 32</span> </span><span class="COMM">/**
+<span class='linenumber'> 33</span> * Decides whether to suppress a particular error.
+<span class='linenumber'> 34</span> * @param {!bidichecker.Error} error An error object.
+<span class='linenumber'> 35</span> * @param {!Array.<!Element>} locationElements Elements representing the error
+<span class='linenumber'> 36</span> * location in the DOM, or an empty array if not applicable. The last
+<span class='linenumber'> 37</span> * element in the array is the actual element where the error occurs;
+<span class='linenumber'> 38</span> * previous elements represent the frames within which the error appears,
+<span class='linenumber'> 39</span> * if relevant.
+<span class='linenumber'> 40</span> * @return {boolean} True if the error should be suppressed.
+<span class='linenumber'> 41</span> */</span><span class="WHIT">
+<span class='linenumber'> 42</span> </span><span class="NAME">bidichecker.Filter.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">goog.abstractMethod</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 43</span> </span></pre></body></html>
\ No newline at end of file
diff --git a/docs/jsdoc/src_03.html b/docs/jsdoc/src_03.html
new file mode 100644
index 0000000..c6db67e
--- /dev/null
+++ b/docs/jsdoc/src_03.html
@@ -0,0 +1,995 @@
+<html><head><style>
+ .KEYW {color: #933;}
+ .COMM {color: #bbb; font-style: italic;}
+ .NUMB {color: #393;}
+ .STRN {color: #393;}
+ .REGX {color: #339;}
+ .linenumber {border-right: 1px dotted #666; color: #666; font-style: normal;}
+ </style></head><body><pre><span class='linenumber'> 1</span> <span class="COMM">// Copyright 2009 Google Inc. All Rights Reserved.</span><span class="WHIT">
+<span class='linenumber'> 2</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 3</span> </span><span class="COMM">// Licensed under the Apache License, Version 2.0 (the "License");</span><span class="WHIT">
+<span class='linenumber'> 4</span> </span><span class="COMM">// you may not use this file except in compliance with the License.</span><span class="WHIT">
+<span class='linenumber'> 5</span> </span><span class="COMM">// You may obtain a copy of the License at</span><span class="WHIT">
+<span class='linenumber'> 6</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 7</span> </span><span class="COMM">// http://www.apache.org/licenses/LICENSE-2.0</span><span class="WHIT">
+<span class='linenumber'> 8</span> </span><span class="COMM">//</span><span class="WHIT">
+<span class='linenumber'> 9</span> </span><span class="COMM">// Unless required by applicable law or agreed to in writing, software</span><span class="WHIT">
+<span class='linenumber'> 10</span> </span><span class="COMM">// distributed under the License is distributed on an "AS-IS" BASIS,</span><span class="WHIT">
+<span class='linenumber'> 11</span> </span><span class="COMM">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span><span class="WHIT">
+<span class='linenumber'> 12</span> </span><span class="COMM">// See the License for the specific language governing permissions and</span><span class="WHIT">
+<span class='linenumber'> 13</span> </span><span class="COMM">// limitations under the License.</span><span class="WHIT">
+<span class='linenumber'> 14</span>
+<span class='linenumber'> 15</span> </span><span class="COMM">/**
+<span class='linenumber'> 16</span> * @fileoverview Factory methods for constructing error-suppression filters.
+<span class='linenumber'> 17</span> */</span><span class="WHIT">
+<span class='linenumber'> 18</span>
+<span class='linenumber'> 19</span> </span><span class="COMM">/**
+<span class='linenumber'> 20</span> * In this file, filters (whether their static factory methods or their class
+<span class='linenumber'> 21</span> * definitions) are ordered alphabetically.
+<span class='linenumber'> 22</span> */</span><span class="WHIT">
+<span class='linenumber'> 23</span>
+<span class='linenumber'> 24</span>
+<span class='linenumber'> 25</span> </span><span class="NAME">goog.provide</span><span class="PUNC">(</span><span class="STRN">'bidichecker.FilterFactory'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 26</span> </span><span class="NAME">goog.provide</span><span class="PUNC">(</span><span class="STRN">'bidichecker.FilterFactory.ComposableFilter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 27</span>
+<span class='linenumber'> 28</span> </span><span class="NAME">goog.require</span><span class="PUNC">(</span><span class="STRN">'bidichecker.Filter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 29</span> </span><span class="NAME">goog.require</span><span class="PUNC">(</span><span class="STRN">'goog.json'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 30</span>
+<span class='linenumber'> 31</span>
+<span class='linenumber'> 32</span> </span><span class="COMM">/**
+<span class='linenumber'> 33</span> * Abstract base class for custom filter classes, providing them with
+<span class='linenumber'> 34</span> * <code>and()</code>, <code>or()</code> and <code>not()</code> methods.
+<span class='linenumber'> 35</span> * @constructor
+<span class='linenumber'> 36</span> * @implements {bidichecker.Filter}
+<span class='linenumber'> 37</span> * @export
+<span class='linenumber'> 38</span> */</span><span class="WHIT">
+<span class='linenumber'> 39</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 40</span>
+<span class='linenumber'> 41</span>
+<span class='linenumber'> 42</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'> 43</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'> 44</span> </span><span class="NAME">goog.abstractMethod</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 45</span>
+<span class='linenumber'> 46</span>
+<span class='linenumber'> 47</span> </span><span class="COMM">/**
+<span class='linenumber'> 48</span> * Create a filter which ands this filter with another.
+<span class='linenumber'> 49</span> * @param {!bidichecker.Filter} other The second subfilter.
+<span class='linenumber'> 50</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'> 51</span> * @export
+<span class='linenumber'> 52</span> */</span><span class="WHIT">
+<span class='linenumber'> 53</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter.prototype.and</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">other</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'> 54</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.and</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">other</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 55</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 56</span>
+<span class='linenumber'> 57</span>
+<span class='linenumber'> 58</span> </span><span class="COMM">/**
+<span class='linenumber'> 59</span> * Create a filter which inverts this filter.
+<span class='linenumber'> 60</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'> 61</span> * @export
+<span class='linenumber'> 62</span> */</span><span class="WHIT">
+<span class='linenumber'> 63</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter.prototype.not</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'> 64</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.not</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 65</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 66</span>
+<span class='linenumber'> 67</span>
+<span class='linenumber'> 68</span> </span><span class="COMM">/**
+<span class='linenumber'> 69</span> * Create a filter which ors this filter with another.
+<span class='linenumber'> 70</span> * @param {!bidichecker.Filter} other The second subfilter.
+<span class='linenumber'> 71</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'> 72</span> * @export
+<span class='linenumber'> 73</span> */</span><span class="WHIT">
+<span class='linenumber'> 74</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter.prototype.or</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">other</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'> 75</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.or</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">other</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 76</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 77</span>
+<span class='linenumber'> 78</span>
+<span class='linenumber'> 79</span> </span><span class="COMM">/**
+<span class='linenumber'> 80</span> * Constructs a suppression filter from a bare object with suitable contents.
+<span class='linenumber'> 81</span> * For use in deserializing filters from JSON. Throws a string exception if an
+<span class='linenumber'> 82</span> * invalid filter is encountered.
+<span class='linenumber'> 83</span> * @param {!Object} bareFilter The object representing the filter. Must contain
+<span class='linenumber'> 84</span> * an <code>'opcode'</code> field with a string indicating the filter type.
+<span class='linenumber'> 85</span> * Other supported field names and types are dependent on the filter type.
+<span class='linenumber'> 86</span> * @return {!bidichecker.FilterFactory.ComposableFilter} The new filter.
+<span class='linenumber'> 87</span> * @private
+<span class='linenumber'> 88</span> */</span><span class="WHIT">
+<span class='linenumber'> 89</span> </span><span class="NAME">bidichecker.FilterFactory.constructFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'> 90</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">opcode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareFilter</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 91</span> </span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">opcode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'> 92</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AND'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'> 93</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 94</span>
+<span class='linenumber'> 95</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AT_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'> 96</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'> 97</span>
+<span class='linenumber'> 98</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'AT_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'> 99</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>100</span>
+<span class='linenumber'>101</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'FOLLOWED_BY_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>102</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>103</span>
+<span class='linenumber'>104</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'FOLLOWED_BY_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>105</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>106</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>107</span>
+<span class='linenumber'>108</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_CLASS'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>109</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>110</span>
+<span class='linenumber'>111</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_CLASS_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>112</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>113</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>114</span>
+<span class='linenumber'>115</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_ID'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>116</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>117</span>
+<span class='linenumber'>118</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'LOCATION_ID_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>119</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>120</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>121</span>
+<span class='linenumber'>122</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'NOT'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>123</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>124</span>
+<span class='linenumber'>125</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'OR'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>126</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>127</span>
+<span class='linenumber'>128</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'PRECEDED_BY_TEXT'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>129</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>130</span>
+<span class='linenumber'>131</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'PRECEDED_BY_TEXT_REGEXP'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>132</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>133</span> </span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>134</span>
+<span class='linenumber'>135</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'SEVERITY'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>136</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>137</span>
+<span class='linenumber'>138</span> </span><span class="KEYW">case</span><span class="WHIT"> </span><span class="STRN">'TYPE'</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>139</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>140</span>
+<span class='linenumber'>141</span> </span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
+<span class='linenumber'>142</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Unknown filter opcode: \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">opcode</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\''</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>143</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>144</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>145</span>
+<span class='linenumber'>146</span>
+<span class='linenumber'>147</span> </span><span class="COMM">/**
+<span class='linenumber'>148</span> * Deserializes a list of suppression filters from a JSON-format string.
+<span class='linenumber'>149</span> * Throws a string exception if an unknown filter is encountered.
+<span class='linenumber'>150</span> * @param {string=} opt_filtersJson The input string, if provided.
+<span class='linenumber'>151</span> * @return {Array.<!bidichecker.Filter>} The error suppression filters.
+<span class='linenumber'>152</span> */</span><span class="WHIT">
+<span class='linenumber'>153</span> </span><span class="NAME">bidichecker.FilterFactory.readFiltersFromJson</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>154</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>155</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>156</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>157</span>
+<span class='linenumber'>158</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bareFilters</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>159</span> </span><span class="PUNC">(</span><span class="COMM">/** @type {Array.<!Object>} */</span><span class="WHIT"> </span><span class="NAME">goog.json.parse</span><span class="PUNC">(</span><span class="NAME">opt_filtersJson</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>160</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">goog.array.map</span><span class="PUNC">(</span><span class="NAME">bareFilters</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>161</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.constructFilter_</span><span class="PUNC">(</span><span class="NAME">bareFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>162</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>163</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>164</span>
+<span class='linenumber'>165</span>
+<span class='linenumber'>166</span> </span><span class="COMM">/**
+<span class='linenumber'>167</span> * Create a filter which suppresses errors by and-ing component filters.
+<span class='linenumber'>168</span> * @param {!bidichecker.Filter} filter1 The first subfilter.
+<span class='linenumber'>169</span> * @param {!bidichecker.Filter} filter2 The second subfilter.
+<span class='linenumber'>170</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>171</span> * @export
+<span class='linenumber'>172</span> */</span><span class="WHIT">
+<span class='linenumber'>173</span> </span><span class="NAME">bidichecker.FilterFactory.and</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>174</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>175</span> </span><span class="PUNC">{</span><span class="STRN">'filter1'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>176</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>177</span>
+<span class='linenumber'>178</span>
+<span class='linenumber'>179</span> </span><span class="COMM">/**
+<span class='linenumber'>180</span> * Create a filter which suppresses errors based on a literal match of their
+<span class='linenumber'>181</span> * <code>atText</code> fields.
+<span class='linenumber'>182</span> * @param {?string} atText A string which must match the entire <code>atText</code>
+<span class='linenumber'>183</span> * field. If empty or null, will only match an empty or null <code>atText</code>.
+<span class='linenumber'>184</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>185</span> * @export
+<span class='linenumber'>186</span> */</span><span class="WHIT">
+<span class='linenumber'>187</span> </span><span class="NAME">bidichecker.FilterFactory.atText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">atText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>188</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'atText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">atText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>189</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>190</span>
+<span class='linenumber'>191</span>
+<span class='linenumber'>192</span> </span><span class="COMM">/**
+<span class='linenumber'>193</span> * Create a filter which suppresses errors by applying a regular expression to
+<span class='linenumber'>194</span> * their <code>atText</code> fields.
+<span class='linenumber'>195</span> * @param {string|RegExp} atTextRegexp A regular expression, which must match
+<span class='linenumber'>196</span> * the entire <code>atText</code> field. If empty or null, will only match an
+<span class='linenumber'>197</span> * empty or null <code>atText</code>.
+<span class='linenumber'>198</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>199</span> * @export
+<span class='linenumber'>200</span> */</span><span class="WHIT">
+<span class='linenumber'>201</span> </span><span class="NAME">bidichecker.FilterFactory.atTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">atTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>202</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>203</span> </span><span class="PUNC">{</span><span class="STRN">'atTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">atTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>204</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>205</span>
+<span class='linenumber'>206</span>
+<span class='linenumber'>207</span> </span><span class="COMM">/**
+<span class='linenumber'>208</span> * Create a filter which suppresses errors based on a literal match of their
+<span class='linenumber'>209</span> * <code>followedByText</code> fields.
+<span class='linenumber'>210</span> * @param {?string} followedByText A string which must match the entire
+<span class='linenumber'>211</span> * <code>followedByText</code> field. If empty or null, will only match an empty
+<span class='linenumber'>212</span> * or null <code>followedByText</code>.
+<span class='linenumber'>213</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>214</span> * @export
+<span class='linenumber'>215</span> */</span><span class="WHIT">
+<span class='linenumber'>216</span> </span><span class="NAME">bidichecker.FilterFactory.followedByText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">followedByText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>217</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>218</span> </span><span class="PUNC">{</span><span class="STRN">'followedByText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">followedByText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>219</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>220</span>
+<span class='linenumber'>221</span>
+<span class='linenumber'>222</span> </span><span class="COMM">/**
+<span class='linenumber'>223</span> * Create a filter which suppresses errors by applying a regular expression to
+<span class='linenumber'>224</span> * their <code>followedByText</code> fields.
+<span class='linenumber'>225</span> * @param {string|RegExp} followedByTextRegexp A regular expression, which must
+<span class='linenumber'>226</span> * match the entire <code>followedByText</code> field. If empty or null, will
+<span class='linenumber'>227</span> * only match an empty or null <code>followedByText</code>.
+<span class='linenumber'>228</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>229</span> * @export
+<span class='linenumber'>230</span> */</span><span class="WHIT">
+<span class='linenumber'>231</span> </span><span class="NAME">bidichecker.FilterFactory.followedByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>232</span> </span><span class="NAME">followedByTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>233</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>234</span> </span><span class="PUNC">{</span><span class="STRN">'followedByTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">followedByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>235</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>236</span>
+<span class='linenumber'>237</span>
+<span class='linenumber'>238</span> </span><span class="COMM">/**
+<span class='linenumber'>239</span> * Create a filter which suppresses errors based on a literal match of one of
+<span class='linenumber'>240</span> * the class names of any parent node of the error location in the DOM.
+<span class='linenumber'>241</span> * @param {string} className A string which must match one of the class names in
+<span class='linenumber'>242</span> * the <code>class</code> attribute of the location or one of its ancestors. Must
+<span class='linenumber'>243</span> * not be empty or null.
+<span class='linenumber'>244</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>245</span> * @export
+<span class='linenumber'>246</span> */</span><span class="WHIT">
+<span class='linenumber'>247</span> </span><span class="NAME">bidichecker.FilterFactory.locationClass</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>248</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">className</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>249</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to bidichecker.FilterFactory.locationClass'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>250</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>251</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>252</span> </span><span class="PUNC">{</span><span class="STRN">'className'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">className</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>253</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>254</span>
+<span class='linenumber'>255</span>
+<span class='linenumber'>256</span> </span><span class="COMM">/**
+<span class='linenumber'>257</span> * Create a filter which suppresses errors based on a regular expression match
+<span class='linenumber'>258</span> * of one of the class names of any parent node of the error location in the
+<span class='linenumber'>259</span> * DOM.
+<span class='linenumber'>260</span> * @param {string|RegExp} classRegexp A regular expression, which must match
+<span class='linenumber'>261</span> * one of the class names in the <code>class</code> attribute of the location or
+<span class='linenumber'>262</span> * one of its ancestors. Must not be empty or null.
+<span class='linenumber'>263</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>264</span> * @export
+<span class='linenumber'>265</span> */</span><span class="WHIT">
+<span class='linenumber'>266</span> </span><span class="NAME">bidichecker.FilterFactory.locationClassRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">classRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>267</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">classRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">classRegexp</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>268</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>269</span> </span><span class="STRN">'bidichecker.FilterFactory.locationClassRegexp'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>270</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>271</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>272</span> </span><span class="PUNC">{</span><span class="STRN">'classRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">classRegexp</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>273</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>274</span>
+<span class='linenumber'>275</span>
+<span class='linenumber'>276</span> </span><span class="COMM">/**
+<span class='linenumber'>277</span> * Create a filter which suppresses errors based on a literal match of the error
+<span class='linenumber'>278</span> * location's (or one of its DOM ancestors') <code>id</code> attribute.
+<span class='linenumber'>279</span> * @param {string} id A string which must match the entire <code>id</code> attribute
+<span class='linenumber'>280</span> * of the location or one of its ancestors. Must not be empty or null.
+<span class='linenumber'>281</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>282</span> * @export
+<span class='linenumber'>283</span> */</span><span class="WHIT">
+<span class='linenumber'>284</span> </span><span class="NAME">bidichecker.FilterFactory.locationId</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>285</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">id</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>286</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to bidichecker.FilterFactory.locationId'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>287</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>288</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'id'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">id</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>289</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>290</span>
+<span class='linenumber'>291</span>
+<span class='linenumber'>292</span> </span><span class="COMM">/**
+<span class='linenumber'>293</span> * Create a filter which suppresses errors by applying a regular expression to
+<span class='linenumber'>294</span> * the error location's (or one of its DOM ancestors') <code>id</code> attribute.
+<span class='linenumber'>295</span> * @param {string|RegExp} idRegexp A regular expression, which must match the
+<span class='linenumber'>296</span> * entire <code>id</code> attribute of the location or one of its ancestors. Must
+<span class='linenumber'>297</span> * not be empty or null.
+<span class='linenumber'>298</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>299</span> * @export
+<span class='linenumber'>300</span> */</span><span class="WHIT">
+<span class='linenumber'>301</span> </span><span class="NAME">bidichecker.FilterFactory.locationIdRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">idRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>302</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">idRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">idRegexp</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>303</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Empty or null argument to '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>304</span> </span><span class="STRN">'bidichecker.FilterFactory.locationIdRegexp'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>305</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>306</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>307</span> </span><span class="PUNC">{</span><span class="STRN">'idRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">idRegexp</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>308</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>309</span>
+<span class='linenumber'>310</span>
+<span class='linenumber'>311</span> </span><span class="COMM">/**
+<span class='linenumber'>312</span> * Create a filter which suppresses errors by inverting another filter.
+<span class='linenumber'>313</span> * @param {!bidichecker.Filter} filter The subfilter.
+<span class='linenumber'>314</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>315</span> * @export
+<span class='linenumber'>316</span> */</span><span class="WHIT">
+<span class='linenumber'>317</span> </span><span class="NAME">bidichecker.FilterFactory.not</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>318</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'filter'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>319</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>320</span>
+<span class='linenumber'>321</span>
+<span class='linenumber'>322</span> </span><span class="COMM">/**
+<span class='linenumber'>323</span> * Create a filter which suppresses errors by or-ing component filters.
+<span class='linenumber'>324</span> * @param {!bidichecker.Filter} filter1 The first subfilter.
+<span class='linenumber'>325</span> * @param {!bidichecker.Filter} filter2 The second subfilter.
+<span class='linenumber'>326</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>327</span> * @export
+<span class='linenumber'>328</span> */</span><span class="WHIT">
+<span class='linenumber'>329</span> </span><span class="NAME">bidichecker.FilterFactory.or</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>330</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>331</span> </span><span class="PUNC">{</span><span class="STRN">'filter1'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">filter2</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>332</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>333</span>
+<span class='linenumber'>334</span>
+<span class='linenumber'>335</span> </span><span class="COMM">/**
+<span class='linenumber'>336</span> * Create a filter which suppresses errors based on a literal match of their
+<span class='linenumber'>337</span> * <code>precededByText</code> fields.
+<span class='linenumber'>338</span> * @param {?string} precededByText A string which must match the entire
+<span class='linenumber'>339</span> * <code>precededByText</code> field. If empty or null, will only match an empty
+<span class='linenumber'>340</span> * or null <code>precededByText</code>.
+<span class='linenumber'>341</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>342</span> * @export
+<span class='linenumber'>343</span> */</span><span class="WHIT">
+<span class='linenumber'>344</span> </span><span class="NAME">bidichecker.FilterFactory.precededByText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">precededByText</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>345</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>346</span> </span><span class="PUNC">{</span><span class="STRN">'precededByText'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">precededByText</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>347</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>348</span>
+<span class='linenumber'>349</span>
+<span class='linenumber'>350</span> </span><span class="COMM">/**
+<span class='linenumber'>351</span> * Create a filter which suppresses errors by applying a regular expression to
+<span class='linenumber'>352</span> * their <code>precededByText</code> fields.
+<span class='linenumber'>353</span> * @param {string|RegExp} precededByTextRegexp A regular expression, which must
+<span class='linenumber'>354</span> * match the entire <code>precededByText</code> field. If empty or null, will
+<span class='linenumber'>355</span> * only match an empty or null <code>precededByText</code>.
+<span class='linenumber'>356</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>357</span> * @export
+<span class='linenumber'>358</span> */</span><span class="WHIT">
+<span class='linenumber'>359</span> </span><span class="NAME">bidichecker.FilterFactory.precededByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>360</span> </span><span class="NAME">precededByTextRegexp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>361</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>362</span> </span><span class="PUNC">{</span><span class="STRN">'precededByTextRegexp'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">precededByTextRegexp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>363</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>364</span>
+<span class='linenumber'>365</span>
+<span class='linenumber'>366</span> </span><span class="COMM">/**
+<span class='linenumber'>367</span> * Create a filter which suppresses errors based on their severity levels.
+<span class='linenumber'>368</span> * @param {number} severityThreshold the severity level from which errors should
+<span class='linenumber'>369</span> * be suppressed. At level 1, all messages will be filtered out. Note that
+<span class='linenumber'>370</span> * higher values indicate lower severities.
+<span class='linenumber'>371</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>372</span> * @export
+<span class='linenumber'>373</span> */</span><span class="WHIT">
+<span class='linenumber'>374</span> </span><span class="NAME">bidichecker.FilterFactory.severityFrom</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">severityThreshold</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>375</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>376</span> </span><span class="PUNC">{</span><span class="STRN">'severityThreshold'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">severityThreshold</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>377</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>378</span>
+<span class='linenumber'>379</span>
+<span class='linenumber'>380</span> </span><span class="COMM">/**
+<span class='linenumber'>381</span> * Create a filter which suppresses errors based on their type fields.
+<span class='linenumber'>382</span> * @param {string} type The error type name to be matched exactly.
+<span class='linenumber'>383</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
+<span class='linenumber'>384</span> * @export
+<span class='linenumber'>385</span> */</span><span class="WHIT">
+<span class='linenumber'>386</span> </span><span class="NAME">bidichecker.FilterFactory.type</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>387</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">(</span><span class="PUNC">{</span><span class="STRN">'type'</span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>388</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>389</span>
+<span class='linenumber'>390</span>
+<span class='linenumber'>391</span> </span><span class="COMM">/**
+<span class='linenumber'>392</span> * Checks that a required field exists in an object representing a filter, or
+<span class='linenumber'>393</span> * else throws a string exception.
+<span class='linenumber'>394</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>395</span> * @param {string} field The name of the field.
+<span class='linenumber'>396</span> * @private
+<span class='linenumber'>397</span> */</span><span class="WHIT">
+<span class='linenumber'>398</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>399</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">field</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>400</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'No \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter found for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>401</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>402</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>403</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>404</span>
+<span class='linenumber'>405</span>
+<span class='linenumber'>406</span> </span><span class="COMM">/**
+<span class='linenumber'>407</span> * Checks that a required field of a given type exists in an object representing
+<span class='linenumber'>408</span> * a filter, or else throws a string exception.
+<span class='linenumber'>409</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>410</span> * @param {string} field The name of the field.
+<span class='linenumber'>411</span> * @param {string} type The required type of the field.
+<span class='linenumber'>412</span> * @private
+<span class='linenumber'>413</span> */</span><span class="WHIT">
+<span class='linenumber'>414</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>415</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>416</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>417</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Wrong type for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>418</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter; expected '</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">type</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>419</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>420</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>421</span>
+<span class='linenumber'>422</span>
+<span class='linenumber'>423</span> </span><span class="COMM">/**
+<span class='linenumber'>424</span> * Reads a string-valued field from an object representing a filter.
+<span class='linenumber'>425</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>426</span> * @param {string} field The name of the field.
+<span class='linenumber'>427</span> * @return {string} The field value.
+<span class='linenumber'>428</span> * @private
+<span class='linenumber'>429</span> */</span><span class="WHIT">
+<span class='linenumber'>430</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>431</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>432</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {string} */</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>433</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>434</span>
+<span class='linenumber'>435</span>
+<span class='linenumber'>436</span> </span><span class="COMM">/**
+<span class='linenumber'>437</span> * Reads a number-valued field from an object representing a filter.
+<span class='linenumber'>438</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>439</span> * @param {string} field The name of the field.
+<span class='linenumber'>440</span> * @return {number} The field value.
+<span class='linenumber'>441</span> * @private
+<span class='linenumber'>442</span> */</span><span class="WHIT">
+<span class='linenumber'>443</span> </span><span class="NAME">bidichecker.FilterFactory.getNumberParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>444</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'number'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>445</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {number} */</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>446</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>447</span>
+<span class='linenumber'>448</span>
+<span class='linenumber'>449</span> </span><span class="COMM">/**
+<span class='linenumber'>450</span> * Reads a regular expression field from an object representing a filter.
+<span class='linenumber'>451</span> * The field contents must be a string or a RegExp object.
+<span class='linenumber'>452</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>453</span> * @param {string} fieldName The name of the field.
+<span class='linenumber'>454</span> * @return {!RegExp} A regular expression anchored at both ends of the string.
+<span class='linenumber'>455</span> * @private
+<span class='linenumber'>456</span> */</span><span class="WHIT">
+<span class='linenumber'>457</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>458</span> </span><span class="NAME">bidichecker.FilterFactory.checkParamExists_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>459</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">fieldName</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>460</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">pattern</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>461</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>462</span> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="COMM">/** @type {string} */</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>463</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">field</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>464</span> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">field.source</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>465</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>466</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Wrong type for \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">fieldName</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>467</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter; expected string or RegExp'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>468</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>469</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'^('</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">pattern</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">')$'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>470</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>471</span>
+<span class='linenumber'>472</span>
+<span class='linenumber'>473</span> </span><span class="COMM">/**
+<span class='linenumber'>474</span> * Reads a field representing a subfilter from an object representing a filter.
+<span class='linenumber'>475</span> * The field contents can either be a bare object representing a serialized
+<span class='linenumber'>476</span> * filter, or an object supporting an <code>isSuppressed()</code> method.
+<span class='linenumber'>477</span> * @param {!Object} bareObject The object representing the filter.
+<span class='linenumber'>478</span> * @param {string} field The name of the field.
+<span class='linenumber'>479</span> * @return {!bidichecker.FilterFactory.ComposableFilter} A filter constructed
+<span class='linenumber'>480</span> * from the field's contents.
+<span class='linenumber'>481</span> * @private
+<span class='linenumber'>482</span> */</span><span class="WHIT">
+<span class='linenumber'>483</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>484</span> </span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>485</span> </span><span class="NAME">bidichecker.FilterFactory.checkParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">field</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'object'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>486</span>
+<span class='linenumber'>487</span> </span><span class="COMM">// Recursively build any subfilters referred to by this one.</span><span class="WHIT">
+<span class='linenumber'>488</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="NAME">field</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>489</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">subfilterObject</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>490</span> </span><span class="COMM">// Found a constructed filter object.</span><span class="WHIT">
+<span class='linenumber'>491</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>492</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">subfilterObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>493</span> </span><span class="COMM">// Found a raw filter object.</span><span class="WHIT">
+<span class='linenumber'>494</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.constructFilter_</span><span class="PUNC">(</span><span class="NAME">subfilterObject</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>495</span> </span><span class="PUNC">}</span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>496</span> </span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="STRN">'Can\'t make a filter out of the \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">field</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' parameter of \''</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT">
+<span class='linenumber'>497</span> </span><span class="NAME">bareObject</span><span class="PUNC">[</span><span class="STRN">'opcode'</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">'\' filter'</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>498</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>499</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>500</span>
+<span class='linenumber'>501</span>
+<span class='linenumber'>502</span> </span><span class="COMM">/**
+<span class='linenumber'>503</span> * A filter which suppresses errors by and-ing component filters.
+<span class='linenumber'>504</span> * @param {!Object} bareObject An object containing 'filter1' and 'filter2'
+<span class='linenumber'>505</span> * fields, each containing a bare object representing a component filter.
+<span class='linenumber'>506</span> * @constructor
+<span class='linenumber'>507</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>508</span> * @private
+<span class='linenumber'>509</span> */</span><span class="WHIT">
+<span class='linenumber'>510</span> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>511</span> </span><span class="COMM">/**
+<span class='linenumber'>512</span> * @type {!bidichecker.Filter}
+<span class='linenumber'>513</span> * @private
+<span class='linenumber'>514</span> */</span><span class="WHIT">
+<span class='linenumber'>515</span> </span><span class="NAME">this.filter1_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>516</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>517</span>
+<span class='linenumber'>518</span> </span><span class="COMM">/**
+<span class='linenumber'>519</span> * @type {!bidichecker.Filter}
+<span class='linenumber'>520</span> * @private
+<span class='linenumber'>521</span> */</span><span class="WHIT">
+<span class='linenumber'>522</span> </span><span class="NAME">this.filter2_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>523</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>524</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>525</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AndFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>526</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>527</span>
+<span class='linenumber'>528</span>
+<span class='linenumber'>529</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>530</span> </span><span class="NAME">bidichecker.FilterFactory.AndFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>531</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>532</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.filter1_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
+<span class='linenumber'>533</span> </span><span class="NAME">this.filter2_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>534</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>535</span>
+<span class='linenumber'>536</span>
+<span class='linenumber'>537</span> </span><span class="COMM">/**
+<span class='linenumber'>538</span> * A filter which suppresses errors by a literal match of their <code>atText</code>
+<span class='linenumber'>539</span> * fields.
+<span class='linenumber'>540</span> * @param {!Object} bareObject An object containing an 'atText' field, which
+<span class='linenumber'>541</span> * must match the entire <code>atText</code> field value. If empty, will only
+<span class='linenumber'>542</span> * match an empty or null <code>atText</code>.
+<span class='linenumber'>543</span> * @constructor
+<span class='linenumber'>544</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>545</span> * @private
+<span class='linenumber'>546</span> */</span><span class="WHIT">
+<span class='linenumber'>547</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>548</span> </span><span class="COMM">/**
+<span class='linenumber'>549</span> * @type {string}
+<span class='linenumber'>550</span> * @private
+<span class='linenumber'>551</span> */</span><span class="WHIT">
+<span class='linenumber'>552</span> </span><span class="NAME">this.atText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>553</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'atText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>554</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>555</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>556</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>557</span>
+<span class='linenumber'>558</span>
+<span class='linenumber'>559</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>560</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>561</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>562</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.atText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getAtText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>563</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>564</span>
+<span class='linenumber'>565</span>
+<span class='linenumber'>566</span> </span><span class="COMM">/**
+<span class='linenumber'>567</span> * A filter which suppresses errors by applying a regular expression to their
+<span class='linenumber'>568</span> * <code>atText</code> fields.
+<span class='linenumber'>569</span> * @param {!Object} bareObject An object containing an 'atTextRegexp' field
+<span class='linenumber'>570</span> * containing a regular expression, which must match the entire
+<span class='linenumber'>571</span> * <code>atText</code> field value. If empty, will only match an empty or null
+<span class='linenumber'>572</span> * <code>atText</code>.
+<span class='linenumber'>573</span> * @constructor
+<span class='linenumber'>574</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>575</span> * @private
+<span class='linenumber'>576</span> */</span><span class="WHIT">
+<span class='linenumber'>577</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>578</span> </span><span class="COMM">/**
+<span class='linenumber'>579</span> * @type {!RegExp}
+<span class='linenumber'>580</span> * @private
+<span class='linenumber'>581</span> */</span><span class="WHIT">
+<span class='linenumber'>582</span> </span><span class="NAME">this.atTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>583</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'atTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>584</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>585</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>586</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>587</span>
+<span class='linenumber'>588</span>
+<span class='linenumber'>589</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>590</span> </span><span class="NAME">bidichecker.FilterFactory.AtTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>591</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>592</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.atTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getAtText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>593</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>594</span>
+<span class='linenumber'>595</span>
+<span class='linenumber'>596</span> </span><span class="COMM">/**
+<span class='linenumber'>597</span> * A filter which suppresses errors by a literal match of their {@code
+<span class='linenumber'>598</span> * followedByText} fields.
+<span class='linenumber'>599</span> * @param {!Object} bareObject An object containing a 'followedByText' field,
+<span class='linenumber'>600</span> * which must match the entire <code>followedByText</code> field value. If empty,
+<span class='linenumber'>601</span> * will only match an empty or null <code>followedByText</code>.
+<span class='linenumber'>602</span> * @constructor
+<span class='linenumber'>603</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>604</span> * @private
+<span class='linenumber'>605</span> */</span><span class="WHIT">
+<span class='linenumber'>606</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>607</span> </span><span class="COMM">/**
+<span class='linenumber'>608</span> * @type {string}
+<span class='linenumber'>609</span> * @private
+<span class='linenumber'>610</span> */</span><span class="WHIT">
+<span class='linenumber'>611</span> </span><span class="NAME">this.followedByText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>612</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'followedByText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>613</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>614</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>615</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>616</span>
+<span class='linenumber'>617</span>
+<span class='linenumber'>618</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>619</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>620</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>621</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.followedByText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getFollowedByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>622</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>623</span>
+<span class='linenumber'>624</span>
+<span class='linenumber'>625</span> </span><span class="COMM">/**
+<span class='linenumber'>626</span> * A filter which suppresses errors by applying a regular expression to their
+<span class='linenumber'>627</span> * <code>followedByText</code> fields.
+<span class='linenumber'>628</span> * @param {!Object} bareObject An object containing a 'followedByTextRegexp'
+<span class='linenumber'>629</span> * field containing a regular expression, which must match the entire
+<span class='linenumber'>630</span> * <code>followedByText</code> field value. If empty, will only match an empty or
+<span class='linenumber'>631</span> * null <code>followedByText</code>.
+<span class='linenumber'>632</span> * @constructor
+<span class='linenumber'>633</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>634</span> * @private
+<span class='linenumber'>635</span> */</span><span class="WHIT">
+<span class='linenumber'>636</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>637</span> </span><span class="COMM">/**
+<span class='linenumber'>638</span> * @type {!RegExp}
+<span class='linenumber'>639</span> * @private
+<span class='linenumber'>640</span> */</span><span class="WHIT">
+<span class='linenumber'>641</span> </span><span class="NAME">this.followedByTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>642</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>643</span> </span><span class="STRN">'followedByTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>644</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>645</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>646</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>647</span>
+<span class='linenumber'>648</span>
+<span class='linenumber'>649</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>650</span> </span><span class="NAME">bidichecker.FilterFactory.FollowedByTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>651</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>652</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.followedByTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getFollowedByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>653</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>654</span>
+<span class='linenumber'>655</span>
+<span class='linenumber'>656</span> </span><span class="COMM">/**
+<span class='linenumber'>657</span> * A filter which suppresses errors by a literal match of the error location's
+<span class='linenumber'>658</span> * (or one of its DOM ancestors') <code>class</code> name.
+<span class='linenumber'>659</span> * @param {!Object} bareObject An object containing a 'className' field, which
+<span class='linenumber'>660</span> * must match one of the class names in the <code>class</code> attribute of the
+<span class='linenumber'>661</span> * location or one of its ancestors.
+<span class='linenumber'>662</span> * @constructor
+<span class='linenumber'>663</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>664</span> * @private
+<span class='linenumber'>665</span> */</span><span class="WHIT">
+<span class='linenumber'>666</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>667</span> </span><span class="COMM">/**
+<span class='linenumber'>668</span> * @type {string}
+<span class='linenumber'>669</span> * @private
+<span class='linenumber'>670</span> */</span><span class="WHIT">
+<span class='linenumber'>671</span> </span><span class="NAME">this.className_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>672</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'className'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>673</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>674</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>675</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>676</span>
+<span class='linenumber'>677</span>
+<span class='linenumber'>678</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>679</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>680</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>681</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>682</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>683</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>684</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>685</span> </span><span class="COMM">// Match each whitespace-separated class name separately.</span><span class="WHIT">
+<span class='linenumber'>686</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.className.split</span><span class="PUNC">(</span><span class="REGX">/\s/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>687</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">classNames.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>688</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.className_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>689</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>690</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>691</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>692</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>693</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>694</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>695</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>696</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>697</span>
+<span class='linenumber'>698</span>
+<span class='linenumber'>699</span> </span><span class="COMM">/**
+<span class='linenumber'>700</span> * A filter which suppresses errors by applying a regular expression to the
+<span class='linenumber'>701</span> * error location's (or one of its DOM ancestors') <code>class</code> name.
+<span class='linenumber'>702</span> * @param {!Object} bareObject An object containing a 'classRegexp' field,
+<span class='linenumber'>703</span> * containing a regular expression which must match one of the class names
+<span class='linenumber'>704</span> * in the <code>class</code> attribute of the location or one of its ancestors.
+<span class='linenumber'>705</span> * @constructor
+<span class='linenumber'>706</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>707</span> * @private
+<span class='linenumber'>708</span> */</span><span class="WHIT">
+<span class='linenumber'>709</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>710</span> </span><span class="COMM">/**
+<span class='linenumber'>711</span> * @type {!RegExp}
+<span class='linenumber'>712</span> * @private
+<span class='linenumber'>713</span> */</span><span class="WHIT">
+<span class='linenumber'>714</span> </span><span class="NAME">this.classRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>715</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'classRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>716</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>717</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>718</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>719</span>
+<span class='linenumber'>720</span>
+<span class='linenumber'>721</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>722</span> </span><span class="NAME">bidichecker.FilterFactory.LocationClassRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>723</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>724</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>725</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>726</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>727</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.className</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>728</span> </span><span class="COMM">// Match each whitespace-separated class name separately.</span><span class="WHIT">
+<span class='linenumber'>729</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">classNames</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.className.split</span><span class="PUNC">(</span><span class="REGX">/\s/</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>730</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">classNames.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>731</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">this.classRegexp_.test</span><span class="PUNC">(</span><span class="NAME">classNames</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>732</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>733</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>734</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>735</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>736</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>737</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>738</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>739</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>740</span>
+<span class='linenumber'>741</span>
+<span class='linenumber'>742</span> </span><span class="COMM">/**
+<span class='linenumber'>743</span> * A filter which suppresses errors by a literal match of the error location's
+<span class='linenumber'>744</span> * (or one of its DOM ancestors') <code>id</code> attribute.
+<span class='linenumber'>745</span> * @param {!Object} bareObject An object containing an 'id' field, which must
+<span class='linenumber'>746</span> * match the <code>id</code> attribute of the location or one of its ancestors.
+<span class='linenumber'>747</span> * @constructor
+<span class='linenumber'>748</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>749</span> * @private
+<span class='linenumber'>750</span> */</span><span class="WHIT">
+<span class='linenumber'>751</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>752</span> </span><span class="COMM">/**
+<span class='linenumber'>753</span> * @type {string}
+<span class='linenumber'>754</span> * @private
+<span class='linenumber'>755</span> */</span><span class="WHIT">
+<span class='linenumber'>756</span> </span><span class="NAME">this.id_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'id'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>757</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>758</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>759</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>760</span>
+<span class='linenumber'>761</span>
+<span class='linenumber'>762</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>763</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>764</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>765</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>766</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>767</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>768</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.id_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">current.id</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>769</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>770</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>771</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>772</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>773</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>774</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>775</span>
+<span class='linenumber'>776</span>
+<span class='linenumber'>777</span> </span><span class="COMM">/**
+<span class='linenumber'>778</span> * A filter which suppresses errors by applying a regular expression to the
+<span class='linenumber'>779</span> * error location's (or one of its DOM ancestors') <code>id</code> attribute.
+<span class='linenumber'>780</span> * @param {!Object} bareObject An object containing an 'idRegexp' field
+<span class='linenumber'>781</span> * containing a regular expression, which must match the <code>id</code>
+<span class='linenumber'>782</span> * attribute of the location or one of its ancestors.
+<span class='linenumber'>783</span> * @constructor
+<span class='linenumber'>784</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>785</span> * @private
+<span class='linenumber'>786</span> */</span><span class="WHIT">
+<span class='linenumber'>787</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>788</span> </span><span class="COMM">/**
+<span class='linenumber'>789</span> * @type {!RegExp}
+<span class='linenumber'>790</span> * @private
+<span class='linenumber'>791</span> */</span><span class="WHIT">
+<span class='linenumber'>792</span> </span><span class="NAME">this.idRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>793</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'idRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>794</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>795</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>796</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>797</span>
+<span class='linenumber'>798</span>
+<span class='linenumber'>799</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>800</span> </span><span class="NAME">bidichecker.FilterFactory.LocationIdRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>801</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>802</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC"><</span><span class="WHIT"> </span><span class="NAME">locationElements.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">++</span><span class="NAME">i</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>803</span> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">current</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>804</span> </span><span class="NAME">current</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">current.parentNode</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>805</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.idRegexp_.test</span><span class="PUNC">(</span><span class="NAME">current.id</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>806</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>807</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>808</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>809</span> </span><span class="PUNC">}</span><span class="WHIT">
+<span class='linenumber'>810</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>811</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>812</span>
+<span class='linenumber'>813</span>
+<span class='linenumber'>814</span> </span><span class="COMM">/**
+<span class='linenumber'>815</span> * A filter which suppresses errors by inverting another filter.
+<span class='linenumber'>816</span> * @param {!Object} bareObject An object containing a 'filter' field, containing
+<span class='linenumber'>817</span> * a bare object representing a component filter.
+<span class='linenumber'>818</span> * @constructor
+<span class='linenumber'>819</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>820</span> * @private
+<span class='linenumber'>821</span> */</span><span class="WHIT">
+<span class='linenumber'>822</span> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>823</span> </span><span class="COMM">/**
+<span class='linenumber'>824</span> * @type {!bidichecker.Filter}
+<span class='linenumber'>825</span> * @private
+<span class='linenumber'>826</span> */</span><span class="WHIT">
+<span class='linenumber'>827</span> </span><span class="NAME">this.filter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>828</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>829</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>830</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.NotFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>831</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>832</span>
+<span class='linenumber'>833</span>
+<span class='linenumber'>834</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>835</span> </span><span class="NAME">bidichecker.FilterFactory.NotFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>836</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>837</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.filter_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>838</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>839</span>
+<span class='linenumber'>840</span>
+<span class='linenumber'>841</span> </span><span class="COMM">/**
+<span class='linenumber'>842</span> * A filter which suppresses errors by or-ing component filters.
+<span class='linenumber'>843</span> * @param {!Object} bareObject An object containing 'filter1' and 'filter2'
+<span class='linenumber'>844</span> * fields, each containing a bare object representing a component filter.
+<span class='linenumber'>845</span> * @constructor
+<span class='linenumber'>846</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>847</span> * @private
+<span class='linenumber'>848</span> */</span><span class="WHIT">
+<span class='linenumber'>849</span> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>850</span> </span><span class="COMM">/**
+<span class='linenumber'>851</span> * @type {!bidichecker.Filter}
+<span class='linenumber'>852</span> * @private
+<span class='linenumber'>853</span> */</span><span class="WHIT">
+<span class='linenumber'>854</span> </span><span class="NAME">this.filter1_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>855</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter1'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>856</span>
+<span class='linenumber'>857</span> </span><span class="COMM">/**
+<span class='linenumber'>858</span> * @type {!bidichecker.Filter}
+<span class='linenumber'>859</span> * @private
+<span class='linenumber'>860</span> */</span><span class="WHIT">
+<span class='linenumber'>861</span> </span><span class="NAME">this.filter2_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>862</span> </span><span class="NAME">bidichecker.FilterFactory.getFilterParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'filter2'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>863</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>864</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.OrFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>865</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>866</span>
+<span class='linenumber'>867</span>
+<span class='linenumber'>868</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>869</span> </span><span class="NAME">bidichecker.FilterFactory.OrFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>870</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>871</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.filter1_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT">
+<span class='linenumber'>872</span> </span><span class="NAME">this.filter2_.isSuppressed</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>873</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>874</span>
+<span class='linenumber'>875</span>
+<span class='linenumber'>876</span> </span><span class="COMM">/**
+<span class='linenumber'>877</span> * A filter which suppresses errors by a literal match of their
+<span class='linenumber'>878</span> * <code>precededByText</code> fields.
+<span class='linenumber'>879</span> * @param {!Object} bareObject An object containing a 'precededByText' field,
+<span class='linenumber'>880</span> * which must match the entire <code>precededByText</code> field value. If empty,
+<span class='linenumber'>881</span> * will only match an empty or null <code>precededByText</code>.
+<span class='linenumber'>882</span> * @constructor
+<span class='linenumber'>883</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>884</span> * @private
+<span class='linenumber'>885</span> */</span><span class="WHIT">
+<span class='linenumber'>886</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>887</span> </span><span class="COMM">/**
+<span class='linenumber'>888</span> * @type {string}
+<span class='linenumber'>889</span> * @private
+<span class='linenumber'>890</span> */</span><span class="WHIT">
+<span class='linenumber'>891</span> </span><span class="NAME">this.precededByText_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>892</span> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'precededByText'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>893</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>894</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>895</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>896</span>
+<span class='linenumber'>897</span>
+<span class='linenumber'>898</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>899</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>900</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>901</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.precededByText_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">error.getPrecededByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>902</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>903</span>
+<span class='linenumber'>904</span>
+<span class='linenumber'>905</span> </span><span class="COMM">/**
+<span class='linenumber'>906</span> * A filter which suppresses errors by applying a regular expression to their
+<span class='linenumber'>907</span> * <code>precededByText</code> fields.
+<span class='linenumber'>908</span> * @param {!Object} bareObject An object containing a 'precededByTextRegexp'
+<span class='linenumber'>909</span> * field containing a regular expression, which must match the entire
+<span class='linenumber'>910</span> * precededByText field value. If empty, will only match an empty or null
+<span class='linenumber'>911</span> * <code>precededByText</code>.
+<span class='linenumber'>912</span> * @constructor
+<span class='linenumber'>913</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>914</span> * @private
+<span class='linenumber'>915</span> */</span><span class="WHIT">
+<span class='linenumber'>916</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>917</span> </span><span class="COMM">/**
+<span class='linenumber'>918</span> * @type {!RegExp}
+<span class='linenumber'>919</span> * @private
+<span class='linenumber'>920</span> */</span><span class="WHIT">
+<span class='linenumber'>921</span> </span><span class="NAME">this.precededByTextRegexp_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>922</span> </span><span class="NAME">bidichecker.FilterFactory.getRegexpParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>923</span> </span><span class="STRN">'precededByTextRegexp'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>924</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>925</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>926</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>927</span>
+<span class='linenumber'>928</span>
+<span class='linenumber'>929</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>930</span> </span><span class="NAME">bidichecker.FilterFactory.PrecededByTextRegexpFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
+<span class='linenumber'>931</span> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>932</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.precededByTextRegexp_.test</span><span class="PUNC">(</span><span class="NAME">error.getPrecededByText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>933</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>934</span>
+<span class='linenumber'>935</span>
+<span class='linenumber'>936</span> </span><span class="COMM">/**
+<span class='linenumber'>937</span> * A filter which suppresses errors based on their severity fields.
+<span class='linenumber'>938</span> * @param {!Object} bareObject An object containing an integer-valued
+<span class='linenumber'>939</span> * 'severityThreshold' field representing the threshold severity value for
+<span class='linenumber'>940</span> * suppression.
+<span class='linenumber'>941</span> * @constructor
+<span class='linenumber'>942</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>943</span> * @private
+<span class='linenumber'>944</span> */</span><span class="WHIT">
+<span class='linenumber'>945</span> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>946</span> </span><span class="COMM">/**
+<span class='linenumber'>947</span> * @type {number}
+<span class='linenumber'>948</span> * @private
+<span class='linenumber'>949</span> */</span><span class="WHIT">
+<span class='linenumber'>950</span> </span><span class="NAME">this.severityThreshold_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getNumberParam_</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>951</span> </span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'severityThreshold'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>952</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>953</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>954</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>955</span>
+<span class='linenumber'>956</span>
+<span class='linenumber'>957</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>958</span> </span><span class="NAME">bidichecker.FilterFactory.SeverityFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>959</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>960</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.severityThreshold_</span><span class="WHIT"> </span><span class="PUNC"><=</span><span class="WHIT"> </span><span class="NAME">error.getSeverity</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>961</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>962</span>
+<span class='linenumber'>963</span>
+<span class='linenumber'>964</span> </span><span class="COMM">/**
+<span class='linenumber'>965</span> * A filter which suppresses errors based on their type fields.
+<span class='linenumber'>966</span> * @param {!Object} bareObject An object containing a string-valued 'type' field
+<span class='linenumber'>967</span> * which must exactly match the error type value.
+<span class='linenumber'>968</span> * @constructor
+<span class='linenumber'>969</span> * @extends {bidichecker.FilterFactory.ComposableFilter}
+<span class='linenumber'>970</span> * @private
+<span class='linenumber'>971</span> */</span><span class="WHIT">
+<span class='linenumber'>972</span> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>973</span> </span><span class="COMM">/**
+<span class='linenumber'>974</span> * @type {string}
+<span class='linenumber'>975</span> * @private
+<span class='linenumber'>976</span> */</span><span class="WHIT">
+<span class='linenumber'>977</span> </span><span class="NAME">this.type_</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bidichecker.FilterFactory.getStringParam_</span><span class="PUNC">(</span><span class="NAME">bareObject</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'type'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>978</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>979</span> </span><span class="NAME">goog.inherits</span><span class="PUNC">(</span><span class="NAME">bidichecker.FilterFactory.TypeFilter_</span><span class="PUNC">,</span><span class="WHIT">
+<span class='linenumber'>980</span> </span><span class="NAME">bidichecker.FilterFactory.ComposableFilter</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>981</span>
+<span class='linenumber'>982</span>
+<span class='linenumber'>983</span> </span><span class="COMM">/** @inheritDoc */</span><span class="WHIT">
+<span class='linenumber'>984</span> </span><span class="NAME">bidichecker.FilterFactory.TypeFilter_.prototype.isSuppressed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT">
+<span class='linenumber'>985</span> </span><span class="NAME">error</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">locationElements</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
+<span class='linenumber'>986</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">this.type_</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">error.getType</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>987</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
+<span class='linenumber'>988</span> </span></pre></body></html>
\ No newline at end of file
diff --git a/docs/users_guide.html b/docs/users_guide.html
index ea883f0..3182d68 100644
--- a/docs/users_guide.html
+++ b/docs/users_guide.html
@@ -18,23 +18,23 @@
<h2>Table of Contents</h2>
<ol>
<li><a href="#TOC-Overview">Overview</a></li>
-<li><a href="#TOC-Getting-started">Getting started</a></li>
+<li><a href="#TOC-Getting-started">Getting started</a>
<ol>
<li><a href="#TOC-Getting-BidiChecker">Getting BidiChecker</a></li>
<li><a href="#TOC-Platform-support">Platform support</a></li>
<li><a href="#TOC-Writing-a-regression">Writing a regression test using the Javascript API</a></li>
<li><a href="#TOC-Viewing-BidiChecker-output">Viewing BidiChecker output</a></li>
-</ol>
-<li><a href="#TOC-Error-descriptions">Error descriptions and error suppression</a></li>
+</ol></li>
+<li><a href="#TOC-Error-descriptions">Error descriptions and error suppression</a>
<ol>
<li><a href="#TOC-The-error-suppression">The error suppression API</a></li>
-</ol>
-<li><a href="#TOC-Catalog-of">Catalog of BiDi checks and errors</a></li>
+</ol></li>
+<li><a href="#TOC-Catalog-of">Catalog of BiDi checks and errors</a>
<ol>
<li><a href="#TOC-Incorrect-overall">Incorrect overall directionality</a></li>
<li><a href="#TOC-Undeclared-opposite">Undeclared opposite-directionality text</a></li>
<li><a href="#TOC-Spillover-from-declared">Spillover from declared opposite-directionality element to number</a></li>
-</ol>
+</ol></li>
<li><a href="#TOC-How-to-devise">How to devise effective test cases</a></li>
<li><a href="#TOC-Issues-with-HTML">Issues with HTML support</a></li>
<li><a href="#TOC-Known-problems">Known problems</a></li>
@@ -48,7 +48,7 @@
<p>BiDi support for a web page is a common
requirement, even for pages in left-to-right scripts. Any page which accepts user input or displays multilingual content is likely to end up handling bidirectional text at
some point, as it will eventually encounter data in Arabic, Hebrew or another
-right-to-left (RTL) language. Unfortunately, handling bidirectional text can be tricky and requires special processing at every appearance of potentially BiDi data in the UI. (<a href="http://doctype.googlecode.com/svn-history/trunk/bidihowto/index.html">Examples of common BiDi UI bugs can be found here</a>.) As a result, BiDi text support often regresses when a developer adds a new feature and simply forgets about BiDi.
+RTL language. Unfortunately, handling bidirectional text can be tricky and requires special processing at every appearance of potentially BiDi data in the UI. (<a href="http://doctype.googlecode.com/svn-history/trunk/bidihowto/index.html">Examples of common BiDi UI bugs can be found here</a>.) As a result, BiDi text support often regresses when a developer adds a new feature and simply forgets about BiDi.
</p>
<p>BidiChecker is a library meant to be called from automated test suites that regression-test live web pages in a browser, usually using an automated testing framework such as JSUnit. BidiChecker provides a Javascript API which integrates easily into such a test. The BidiChecker API
accepts a page element (by default, the body of the top-level document), runs BiDi
@@ -69,12 +69,12 @@
<p>The BidiChecker source code can be downloaded from <a href="http://code.google.com/p/bidichecker">http://code.google.com/p/bidichecker</a> using the following command:</p>
<div style="margin-left: 40px; margin-right: 80px">
<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0); font-weight: bold;">
-<code>svn checkout http://bidichecker.googlecode.com/svn/trunk/ bidichecker</code></div></div>
+<code>svn checkout http://bidichecker.googlecode.com/svn/trunk/ bidichecker</code></span></div></div>
<p>Source code and unit tests can be found in the <tt>src/</tt> subdirectory. This user's guide is in the <tt>docs/</tt> subdirectory, with the complete API documentation in <tt>docs/jsdoc/</tt>. A sample application, along with demonstrations of how BidiChecker can be used to check for BiDi errors, can be found in <tt>samples/reviews/</tt>. The <tt>lib/</tt> subdirectory contains a single-file, precompiled version of BidiChecker named <tt>bidichecker_packaged.js</tt>. Including this one file in the web page to be tested is the usual way to use BidiChecker; you only need BidiChecker's source code if you want to modify BidiChecker or understand its internal workings. For an example of how to use the precompiled package, see <tt>samples/reviews/reviews_packaged_test.html</tt>.</p>
<p>BidiChecker source code uses the <a href="http://code.google.com/p/closure-library/">Closure Library</a>, an open-source library of useful Javascript modules. If you want to run a modified version of BidiChecker or run BidiChecker's own unit tests, you will need to install a copy of the Closure Library on your system. To do that, run the following command from the same working directory as you ran the above command:</p>
<div style="margin-left: 40px; margin-right: 80px">
<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0); font-weight: bold;">
-<code>svn checkout http://closure-library.googlecode.com/svn/trunk/ bidichecker/third_party/closure-library</code></div></div>
+<code>svn checkout http://closure-library.googlecode.com/svn/trunk/ bidichecker/third_party/closure-library</code></span></div></div>
<p>BidiChecker does not currently easily support linking with a copy of the Closure Library at a different location. Please note that you do <b>not</b> need to install the Closure Library to use the precompiled version of BidiChecker.</p>
<p>For an example of how to use BidiChecker with the Closure Library, see <tt>samples/reviews/reviews_closure_test.html</tt>.</p>
<h3><a name="TOC-Platform-support"></a>Platform support</h3>
@@ -86,9 +86,8 @@
<div><br>
A sample test might look like this:<br>
<br>
-<div style="margin-left: 40px; margin-right: 80px"><span style="border-collapse: collapse;">
+<div style="margin-left: 40px; margin-right: 80px">
<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0);">
-<br>
<code>function testAppWithBidiChecker() {</code><br>
<code> // Do something to load the application being tested into the page and get it into</code><br>
<code> // an interesting state for BiDi, e.g. displaying LTR data in an RTL UI.</code><br>
@@ -100,8 +99,7 @@
<code> assertArrayEquals([], errors); // Should be no BiDi errors!</code><br>
<code>}</code><br>
</span>
-</div>
-</span></div>
+</div></div>
<p>A complete code example, including a simple bilingual application and BidiChecker-based JSUnit tests, can be found in the <b style="font-family: courier new,monospace;">samples/reviews/</b> subdirectory of the download tree.</p>
</div>
<div>
@@ -116,14 +114,13 @@
<p>When running a BidiChecker test interactively, however, it is a lot easier to view the errors right in the page where BidiChecker found them using BidiChecker's interactive error browser. To activate the error browser, call <b style="font-family: courier new,monospace;">bidichecker.runGui(errors)</b> from your test code if <b style="font-family: courier new,monospace;">bidichecker.checkPage()</b> returns errors. This will display a dialog box showing the first error, while highlighting the text that aroused BidiChecker's suspicions:</p>
-<div style="display: block; margin-top: 5px; margin-left: 40px; margin-right: auto; margin-bottom: 0pt; text-align: left;"><img src="bidichecker_screenshot.png" border="0"></div>
+<div style="display: block; margin-top: 5px; margin-left: 40px; margin-right: auto; margin-bottom: 0pt; text-align: left;"><img src="bidichecker_screenshot.png" border="0" alt="BidiChecker screenshot"></div>
<br>
<p>The GUI mode is simple to control: Leaf through the errors with the Prev and Next buttons, or select an error by entering its index number in the input box. Each error in turn is highlighted in a yellow background where it appears on the page. The page will also be scrolled to keep the error's position near the top of the window if possible.</p>
<p>The error description text can be copied from the dialog box and used in creating a filter to suppress the error if it is spurious, unimportant, or a known bug. Also, the page under test remains accessible, so you can select the page contents near an error and view the HTML source or DOM state using the browser's developer tools capabilities. Note that an error may not always be visibly highlighted, e.g. if its page location is concealed by another page element, or if it is scrolled out of view in a scrollable element.</p>
<p>Unfortunately, the GUI currently has a major limitation: it will generally not work if more than one test is run from the same test file. Since each test typically manipulates the DOM of the page under test, it is no longer possible to highlight errors on the page after a subsequent test has been run. The GUI can only be relied upon to work correctly if there is only one test in the test file, or alternately if only one test from the file is run (most test runners allow the user to select a single test from a file with several tests).</p>
</div>
</div>
-</div>
<h2><a name="TOC-Error-descriptions"></a>Error descriptions and error suppression</h2>
<p>BidiChecker's results consist of BiDi error reports. The command-line tool outputs them one-per-line as text to standard output, while in the API they are returned as a list of objects with descriptive fields. Either way, the content is the same.<br>
@@ -171,16 +168,14 @@
</div>
<h3><a name="TOC-The-error-suppression"></a>The error suppression API</h3>
<div>The error suppression mechanism supports the specification and composition of filters on most fields of the Error object, as well as filters based on the error's location on the page.</div>
-<div><br>
-</div>
+<div><br></div>
<div>Some filter examples:</div>
-<div><br>
-</div>
-<div style="margin-left: 40px; margin-right: 80px"><span style="border-collapse: collapse;"><span style="font-family: courier new,monospace;">
-<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0);">
+<div><br></div>
+<div style="margin-left: 40px; margin-right: 80px; border-collapse: collapse;">
+<div style="background-color: rgb(223, 223, 223); font-family: courier new,monospace; color: rgb(0, 96, 0);">
<code>var filters = [</code>
-<div><code> // Suppress errors with the </code><b><code>atText</code></b><code> field "שלום":</code></div>
-<div><code> bidichecker.FilterFactory.atText(</code><span style="font-family: monospace; color: rgb(0, 96, 0);">"\u05e9\u05dc\u05d5\u05dd"),</span></div>
+<div><code> // Suppress errors with the </code><b><code>atText</code></b><code> field "שלום":</code></div>
+<div><code> bidichecker.FilterFactory.atText("\u05e9\u05dc\u05d5\u05dd"),</code></div>
<div><code><br> // Suppress errors appearing within a page element with the <b>element id</b> "other_id"</code></div>
<div><code> // (matches any ancestor element, including those of enclosing frames):</code></div>
<div><code> bidichecker.FilterFactory.locationId("other_id"),</code></div>
@@ -197,13 +192,12 @@
<div><code>];</code></div>
<div><code><br>var errors = bidichecker.checkPage(true, top.document.body, filters);</code></div>
<div><code>assertArrayEquals([], errors); // Should be no BiDi errors after filtering!</code></div>
-</span>
</div>
-</span></div>
+</div>
<br>
<div>Below is the complete list of filters (static factory methods in the bidichecker.FilterFactory class):</div>
<div><br>
-<table style="border-color: rgb(136, 136, 136); border-width: 1px; border-collapse: collapse; margin-right: 40px; margin-left: 80px" border="1" bordercolor="#888888" cellspacing="0">
+<table style="border-color: rgb(136, 136, 136); border-width: 1px; border-collapse: collapse; margin-right: 40px; margin-left: 80px" border="1" cellspacing="0" summary="List of filters supported by BidiChecker">
<tbody>
<tr>
<td><b> Filter name</b></td>
@@ -307,10 +301,10 @@
severity level 1.</span></p>
<h4><span style="border-collapse: collapse;">Sample output<br>
</span></h4>
-<div style="margin-left: 40px; margin-right: 80px"><span style="border-collapse: collapse;"><span style="font-family: courier new,monospace;">
-<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0);">
+<div style="margin-left: 40px; margin-right: 80px">
+<div style="background-color: rgb(223, 223, 223); font-family: courier new,monospace; color: rgb(0, 96, 0);">
<b><code>[1] Overall directionality not LTR</code></b></div>
-</span></span></div>
+</div>
<p><a href="http://doctype.googlecode.com/svn-history/trunk/bidihowto/bidi-support-in-a-ui/declaring-page-directionality.html" target="_blank">More information about declaring the overall page directionality.</a></p>
<br>
<h3><a name="TOC-Undeclared-opposite"></a>Undeclared opposite-directionality text</h3>
@@ -324,24 +318,15 @@
<h4><span style="border-collapse: collapse;">Why is it a problem?</span></h4>
<div><span style="border-collapse: collapse;">Undeclared opposite-directionality </span>text is a problem because</div>
<ul><li><span style="border-collapse: collapse;">Undeclared opposite-directionality </span>text
-(LTR or RTL) is often displayed garbled. The common cases (see the link below for examples) are when it:<br>
-</li>
-<ul><li>Starts with a number or punctuation or other neutral characters (e.g. copyright symbol).<br>
-</li>
-<li>
-
-Ends with punctuation or other neutral characters.<br>
-</li>
-<li>Contains embedded text of directionality opposite to it, i.e. in the original directionality.<br>
-</li></ul>
-<li>Even
-when it is not garbled itself, it can garble the layout
+(LTR or RTL) is often displayed garbled. The common cases (see the link below for examples) are when it:
+<ul><li>Starts with a number or punctuation or other neutral characters (e.g. copyright symbol).</li>
+<li>Ends with punctuation or other neutral characters.</li>
+<li>Contains embedded text of directionality opposite to it, i.e. in the original directionality.</li></ul></li>
+<li>Even when it is not garbled itself, it can garble the layout
of the line in which it appears by "sticking" to a logically separate
opposite-directionality phrase next to it. This is especially
problematic when these are separated by neutral items like images or
-inputs, since it will all be laid out in reverse.<br>
-
-</li></ul>
+inputs, since it will all be laid out in reverse.</li></ul>
<h4>Why it might not be a problem<span style="border-collapse: collapse;"><br>
</span></h4>
Undeclared
@@ -352,10 +337,9 @@
phrase, no visible problem will result.
<h4><span style="border-collapse: collapse;">Sample output<br>
</span></h4>
-<div style="margin-left: 40px; margin-right: 80px"><b><span style="font-family: courier new,monospace;">
-<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0);">
-<code>[2] Undeclared RTL text: 'שלום' followed by '.' in <p id='resultStats'><b></code></div>
-</span></b></div>
+<div style="margin-left: 40px; margin-right: 80px">
+<div style="background-color: rgb(223, 223, 223); font-family: courier new,monospace; color: rgb(0, 96, 0);">
+<b><code>[2] Undeclared RTL text: 'שלום' followed by '.' in <p id='resultStats'><b></code></b></div></div>
<div><span style="border-collapse: collapse;"><br>
If the run of
opposite-directionality text is immediately preceded or followed by a
@@ -395,14 +379,14 @@
the opening or closing of a block-level element - then the spillover
candidate is canceled.</li></ol>
<h4>Sample output</h4>
-<div style="margin-left: 40px; margin-right: 80px"><span style="border-collapse: collapse;"><span style="font-family: courier new,monospace;">
+<div style="margin-left: 40px; margin-right: 80px">
<div style="background-color: rgb(223, 223, 223);"><span style="font-family: courier new,monospace; color: rgb(0, 96, 0);">
<b><code>[2]
Declared LTR spillover to number: '1' preceded by '2001 A Space Odyssey
Opening' in <ol id='rso'><li class='g'><table
class='ts'><tbody><tr><td width='290' valign='top'
colspan='1'></code></b>
-</span></b></div></span></div>
+</span></div></div>
<br>
Spillover errors have severity level 2. As with undeclared opposite-directionality text, errors in an area of explictly-declared directionality are demoted to severity level 4 (see above).<br>
<br>
@@ -428,15 +412,12 @@
</li></ol>
<h2><a name="TOC-Known-problems"></a>Known problems</h2>
<ol><li>The GUI does not work correctly if more than one test is run from a given test file; otherwise, subsequent tests may corrupt the DOM of the test for which the GUI is run, making it unusable.</li>
-><li>The dialog box of the GUI mode does not work correctly when run on some pages.</li>
+<li>The dialog box of the GUI mode does not work correctly when run on some pages.</li>
<li>The GUI mode does not interact well with frameset-style frames. The dialog box will always appear in the first frame on the page, where it may not fit or be inaccessible or invisible.</li>
<li>If an error's page location is already on a yellow background, or is scrolled out of view in a scrollable component, it will not be visible when highlighted by the GUI.<br>
</li>
<li>No support yet for Unicode BiDi embedding control characters.</li></ol>
</div>
-</div>
-</div>
-
</body>
</html>
diff --git a/lib/bidichecker_packaged.js b/lib/bidichecker_packaged.js
index 7c86bba..b6dca88 100755
--- a/lib/bidichecker_packaged.js
+++ b/lib/bidichecker_packaged.js
@@ -1,98 +1,100 @@
(function (){ function h(a){throw a;}
-var i=true,j=null,k=false,m,o=this,aa=function(a,b,c){a=a.split(".");c=c||o;!(a[0]in c)&&c.execScript&&c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)if(!a.length&&b!==undefined)c[d]=b;else c=c[d]?c[d]:c[d]={}},ba=function(){},ca=function(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array||!(a instanceof Object)&&Object.prototype.toString.call(a)=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";
-if(!(a instanceof Object)&&(Object.prototype.toString.call(a)=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call")))return"function"}else return"null";else if(b=="function"&&typeof a.call=="undefined")return"object";return b},q=function(a){return ca(a)=="array"},da=function(a){var b=ca(a);return b=="array"||b=="object"&&typeof a.length=="number"},s=function(a){return typeof a=="string"},ea=function(a){return ca(a)=="function"},
-fa=function(a){a=ca(a);return a=="object"||a=="array"||a=="function"},ia=function(a){return a[ga]||(a[ga]=++ha)},ga="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36),ha=0,ja=function(a,b){var c=b||o;if(arguments.length>2){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(c,e)}}else return function(){return a.apply(c,arguments)}},ka=function(a){var b=Array.prototype.slice.call(arguments,
-1);return function(){var c=Array.prototype.slice.call(arguments);c.unshift.apply(c,b);return a.apply(this,c)}},la=Date.now||function(){return+new Date},u=function(a,b){function c(){}c.prototype=b.prototype;a.l=b.prototype;a.prototype=new c};var ma=function(a){this.stack=Error().stack||"";if(a)this.message=String(a)};u(ma,Error);ma.prototype.name="CustomError";var na=function(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a},ta=function(a,b){if(b)return a.replace(oa,"&").replace(pa,"<").replace(qa,">").replace(ra,""");else{if(!sa.test(a))return a;if(a.indexOf("&")!=-1)a=a.replace(oa,"&");if(a.indexOf("<")!=-1)a=a.replace(pa,"<");if(a.indexOf(">")!=-1)a=a.replace(qa,">");if(a.indexOf('"')!=-1)a=a.replace(ra,""");return a}},oa=/&/g,pa=/</g,qa=/>/g,ra=/\"/g,
-sa=/[&<>\"]/,va=function(a,b){for(var c=0,d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=String(b).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),f=Math.max(d.length,e.length),g=0;c==0&&g<f;g++){var l=d[g]||"",n=e[g]||"",p=RegExp("(\\d*)(\\D*)","g"),G=RegExp("(\\d*)(\\D*)","g");do{var t=p.exec(l)||["","",""],r=G.exec(n)||["","",""];if(t[0].length==0&&r[0].length==0)break;c=ua(t[1].length==0?0:parseInt(t[1],10),r[1].length==0?0:parseInt(r[1],10))||ua(t[2].length==0,r[2].length==0)||
-ua(t[2],r[2])}while(c==0)}return c},ua=function(a,b){if(a<b)return-1;else if(a>b)return 1;return 0};var wa=function(a,b){b.unshift(a);ma.call(this,na.apply(j,b));b.shift();this.Nc=a};u(wa,ma);wa.prototype.name="AssertionError";var xa=function(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}h(new wa(""+d,e||[]))}return a};var v=function(a){return a[a.length-1]},w=Array.prototype,ya=w.indexOf?function(a,b,c){xa(a.length!=j);return w.indexOf.call(a,b,c)}:function(a,b,c){c=c==j?0:c<0?Math.max(0,a.length+c):c;if(s(a)){if(!s(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},za=w.forEach?function(a,b,c){xa(a.length!=j);w.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=s(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},Aa=function(a,b,c){for(var d=
-s(a)?a.split(""):a,e=a.length-1;e>=0;--e)e in d&&b.call(c,d[e],e,a)},Ba=w.map?function(a,b,c){xa(a.length!=j);return w.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=s(a)?a.split(""):a,g=0;g<d;g++)if(g in f)e[g]=b.call(c,f[g],g,a);return e},Ca=w.every?function(a,b,c){xa(a.length!=j);return w.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=s(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return k;return i},Da=function(a,b){var c=ya(a,b),d;if(d=c>=0){xa(a.length!=
-j);w.splice.call(a,c,1)}return d},Ea=function(){return w.concat.apply(w,arguments)},Fa=function(a){if(q(a))return Ea(a);else{for(var b=[],c=0,d=a.length;c<d;c++)b[c]=a[c];return b}},Ga=function(a,b,c){xa(a.length!=j);return arguments.length<=2?w.slice.call(a,b):w.slice.call(a,b,c)},Ha=function(a,b,c,d,e){for(var f=0,g=a.length,l;f<g;){var n=f+g>>1,p;p=c?b.call(e,a[n],n,a):b(d,a[n]);if(p>0)f=n+1;else{g=n;l=!p}}return l?f:~f},Ia=function(a,b){return a>b?1:a<b?-1:0};var x="StopIteration"in o?o.StopIteration:Error("StopIteration"),Ja=function(){};Ja.prototype.next=function(){h(x)};Ja.prototype.Ma=function(){return this};
-var Ka=function(a){if(a instanceof Ja)return a;if(typeof a.Ma=="function")return a.Ma(k);if(da(a)){var b=0,c=new Ja;c.next=function(){for(;;){if(b>=a.length)h(x);if(b in a)return a[b++];else b++}};return c}h(Error("Not implemented"))},La=function(a,b,c){if(da(a))try{za(a,b,c)}catch(d){if(d!==x)h(d)}else{a=Ka(a);try{for(;;)b.call(c,a.next(),undefined,a)}catch(e){if(e!==x)h(e)}}};var Ma=function(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0};Ma.prototype.toString=function(){return"("+this.x+", "+this.y+")"};var y=function(a,b){this.width=a;this.height=b};y.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};y.prototype.Ea=function(){return!(this.width*this.height)};y.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};y.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Na=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)},Oa=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b},Pa=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b},Qa=function(a,b){var c;if(c=b in a)delete a[b];return c},Ra=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Sa=function(a){for(var b,c,d=1;d<arguments.length;d++){c=arguments[d];for(b in c)a[b]=c[b];for(var e=0;e<Ra.length;e++){b=Ra[e];if(Object.prototype.hasOwnProperty.call(c,
-b))a[b]=c[b]}}},Ta=function(){var a=arguments.length;if(a==1&&q(arguments[0]))return Ta.apply(j,arguments[0]);for(var b={},c=0;c<a;c++)b[arguments[c]]=i;return b};var Ua,Va,Wa,Xa,Ya,Za,$a=function(){return o.navigator?o.navigator.userAgent:j},ab=function(){return o.navigator};Ya=Xa=Wa=Va=Ua=k;var bb;if(bb=$a()){var cb=ab();Ua=bb.indexOf("Opera")==0;Va=!Ua&&bb.indexOf("MSIE")!=-1;Xa=(Wa=!Ua&&bb.indexOf("WebKit")!=-1)&&bb.indexOf("Mobile")!=-1;Ya=!Ua&&!Wa&&cb.product=="Gecko"}var db=Ua,z=Va,A=Ya,B=Wa,eb=Xa,fb=ab();Za=(fb&&fb.platform||"").indexOf("Mac")!=-1;var gb=!!ab()&&(ab().appVersion||"").indexOf("X11")!=-1,hb;
-a:{var ib="",jb;if(db&&o.opera){var kb=o.opera.version;ib=typeof kb=="function"?kb():kb}else{if(A)jb=/rv\:([^\);]+)(\)|;)/;else if(z)jb=/MSIE\s+([^\);]+)(\)|;)/;else if(B)jb=/WebKit\/(\S+)/;if(jb){var lb=jb.exec($a());ib=lb?lb[1]:""}}if(z){var mb,nb=o.document;mb=nb?nb.documentMode:undefined;if(mb>parseFloat(ib)){hb=String(mb);break a}}hb=ib}var ob=hb,pb={},C=function(a){return pb[a]||(pb[a]=va(ob,a)>=0)};var qb,rb=!z||C("9");z&&C("9");var sb=function(a){var b;b=(b=a.className)&&typeof b.split=="function"?b.split(/\s+/):[];var c;c=Ga(arguments,1);for(var d=0,e=0;e<c.length;e++)if(!(ya(b,c[e])>=0)){b.push(c[e]);d++}c=d==c.length;a.className=b.join(" ");return c};var H=function(a){return a?new E(F(a)):qb||(qb=new E)},ub=function(a,b,c,d){a=d||a;b=b&&b!="*"?b.toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(!B||tb(document)||C("528"))&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,g;g=a[f];f++)if(b==g.nodeName)d[e++]=g;d.length=e;return d}else return a}a=a.getElementsByTagName(b||"*");if(c){d={};for(f=e=0;g=a[f];f++){b=g.className;if(typeof b.split=="function"&&
-ya(b.split(/\s+/),c)>=0)d[e++]=g}d.length=e;return d}else return a},wb=function(a,b){Na(b,function(c,d){if(d=="style")a.style.cssText=c;else if(d=="class")a.className=c;else if(d=="for")a.htmlFor=c;else if(d in vb)a.setAttribute(vb[d],c);else a[d]=c})},vb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",type:"type"},xb=function(a){var b=a.document;if(B&&!C("500")&&!eb){if(typeof a.innerHeight==
-"undefined")a=window;b=a.innerHeight;var c=a.document.documentElement.scrollHeight;if(a==a.top)if(c<b)b-=15;return new y(a.innerWidth,b)}a=tb(b);if(db&&!C("9.50"))a=k;a=a?b.documentElement:b.body;return new y(a.clientWidth,a.clientHeight)},yb=function(a){return a?a.parentWindow||a.defaultView:window},Ab=function(){return zb(document,arguments)},zb=function(a,b){var c=b[0],d=b[1];if(!rb&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',ta(d.name),'"');if(d.type){c.push(' type="',ta(d.type),
-'"');var e={};Sa(e,d);d=e;delete d.type}c.push(">");c=c.join("")}c=a.createElement(c);if(d)if(s(d))c.className=d;else q(d)?sb.apply(j,[c].concat(d)):wb(c,d);b.length>2&&Bb(a,c,b,2);return c},Bb=function(a,b,c,d){function e(g){if(g)b.appendChild(s(g)?a.createTextNode(g):g)}for(d=d;d<c.length;d++){var f=c[d];da(f)&&!(fa(f)&&f.nodeType>0)?za(Cb(f)?Fa(f):f,e):e(f)}},tb=function(a){return a.compatMode=="CSS1Compat"},Db=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):j},Eb=function(a,b){var c=
-b.parentNode;c&&c.replaceChild(a,b)},F=function(a){return a.nodeType==9?a:a.ownerDocument||a.document},Fb=function(a,b){if("textContent"in a)a.textContent=b;else if(a.firstChild&&a.firstChild.nodeType==3){for(;a.lastChild!=a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=b}else{for(var c;c=a.firstChild;)a.removeChild(c);a.appendChild(F(a).createTextNode(b))}},Cb=function(a){if(a&&typeof a.length=="number")if(fa(a))return typeof a.item=="function"||typeof a.item=="string";else if(ea(a))return typeof a.item==
-"function";return k},E=function(a){this.h=a||o.document||document};E.prototype.n=H;var Gb=function(a){return a.h};E.prototype.c=function(a){return s(a)?this.h.getElementById(a):a};E.prototype.k=function(){return zb(this.h,arguments)};E.prototype.createElement=function(a){return this.h.createElement(a)};E.prototype.createTextNode=function(a){return this.h.createTextNode(a)};var Hb=function(a){a=!B&&tb(a.h)?a.h.documentElement:a.h.body;return new Ma(a.scrollLeft,a.scrollTop)};
-E.prototype.appendChild=function(a,b){a.appendChild(b)};E.prototype.append=function(a){Bb(F(a),a,arguments,1)};var I=function(a,b,c,d,e){this.o=!!b;a&&Ib(this,a,d);this.V=e!=undefined?e:this.p||0;if(this.o)this.V*=-1;this.Vb=!c};u(I,Ja);I.prototype.r=j;I.prototype.p=0;I.prototype.Ib=k;var Ib=function(a,b,c,d){if(a.r=b)a.p=typeof c=="number"?c:a.r.nodeType!=1?0:a.o?-1:1;if(typeof d=="number")a.V=d};
-I.prototype.next=function(){var a;if(this.Ib){if(!this.r||this.Vb&&this.V==0)h(x);a=this.r;var b=this.o?-1:1;if(this.p==b){var c=this.o?a.lastChild:a.firstChild;c?Ib(this,c):Ib(this,a,b*-1)}else(c=this.o?a.previousSibling:a.nextSibling)?Ib(this,c):Ib(this,a.parentNode,b*-1);this.V+=this.p*(this.o?-1:1)}else this.Ib=i;a=this.r;if(!this.r)h(x);return a};
-I.prototype.splice=function(){var a=this.r,b=this.o?1:-1;if(this.p==b){this.p=b*-1;this.V+=this.p*(this.o?-1:1)}this.o=!this.o;I.prototype.next.call(this);this.o=!this.o;b=da(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);Db(a)};var Jb,Kb=!z||C("9"),Lb=z&&!C("8");var Mb=function(){};Mb.prototype.kb=k;Mb.prototype.u=function(){if(!this.kb){this.kb=i;this.g()}};Mb.prototype.g=function(){};var J=function(a,b){this.type=a;this.currentTarget=this.target=b};u(J,Mb);m=J.prototype;m.g=function(){delete this.type;delete this.target;delete this.currentTarget};m.U=k;m.qa=i;m.stopPropagation=function(){this.U=i};m.preventDefault=function(){this.qa=k};var Nb=function(a){a.preventDefault()};var K=function(a,b){a&&this.Da(a,b)};u(K,J);var Ob=[1,4,2];m=K.prototype;m.target=j;m.relatedTarget=j;m.offsetX=0;m.offsetY=0;m.clientX=0;m.clientY=0;m.screenX=0;m.screenY=0;m.button=0;m.keyCode=0;m.charCode=0;m.ctrlKey=k;m.altKey=k;m.shiftKey=k;m.metaKey=k;m.yc=k;m.G=j;
-m.Da=function(a,b){var c=this.type=a.type;this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;if(d){if(A)try{d=d.nodeName&&d}catch(e){d=j}}else if(c=="mouseover")d=a.fromElement;else if(c=="mouseout")d=a.toElement;this.relatedTarget=d;this.offsetX=a.offsetX!==undefined?a.offsetX:a.layerX;this.offsetY=a.offsetY!==undefined?a.offsetY:a.layerY;this.clientX=a.clientX!==undefined?a.clientX:a.pageX;this.clientY=a.clientY!==undefined?a.clientY:a.pageY;this.screenX=a.screenX||0;
-this.screenY=a.screenY||0;this.button=a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||(c=="keypress"?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.yc=Za?a.metaKey:a.ctrlKey;this.state=a.state;this.G=a;delete this.qa;delete this.U};m.stopPropagation=function(){K.l.stopPropagation.call(this);if(this.G.stopPropagation)this.G.stopPropagation();else this.G.cancelBubble=i};
-m.preventDefault=function(){K.l.preventDefault.call(this);var a=this.G;if(a.preventDefault)a.preventDefault();else{a.returnValue=k;if(Lb)try{if(a.ctrlKey||a.keyCode>=112&&a.keyCode<=123)a.keyCode=-1}catch(b){}}};m.g=function(){K.l.g.call(this);this.relatedTarget=this.currentTarget=this.target=this.G=j};var L=function(a,b){this.yb=b;this.R=[];if(a>this.yb)h(Error("[goog.structs.SimplePool] Initial cannot be greater than max"));for(var c=0;c<a;c++)this.R.push(this.C?this.C():{})};u(L,Mb);L.prototype.C=j;L.prototype.jb=j;var Pb=function(a){if(a.R.length)return a.R.pop();return a.C?a.C():{}},Rb=function(a,b){a.R.length<a.yb?a.R.push(b):Qb(a,b)},Qb=function(a,b){if(a.jb)a.jb(b);else if(fa(b))if(ea(b.u))b.u();else for(var c in b)delete b[c]};
-L.prototype.g=function(){L.l.g.call(this);for(var a=this.R;a.length;)Qb(this,a.pop());delete this.R};var Sb;var Tb=(Sb="ScriptEngine"in o&&o.ScriptEngine()=="JScript")?o.ScriptEngineMajorVersion()+"."+o.ScriptEngineMinorVersion()+"."+o.ScriptEngineBuildVersion():"0";var Ub=function(){},Vb=0;m=Ub.prototype;m.key=0;m.ha=k;m.Oa=k;m.Da=function(a,b,c,d,e,f){if(ea(a))this.vb=i;else if(a&&a.handleEvent&&ea(a.handleEvent))this.vb=k;else h(Error("Invalid listener argument"));this.ca=a;this.Db=b;this.src=c;this.type=d;this.capture=!!e;this.Ca=f;this.Oa=k;this.key=++Vb;this.ha=k};m.handleEvent=function(a){if(this.vb)return this.ca.call(this.Ca||this.src,a);return this.ca.handleEvent.call(this.ca,a)};var Wb,Xb,Yb,Zb,$b,ac,bc,cc,dc,ec,fc;
-(function(){function a(){return{j:0,v:0}}function b(){return[]}function c(){var r=function(D){return g.call(r.src,r.key,D)};return r}function d(){return new Ub}function e(){return new K}var f=Sb&&!(va(Tb,"5.7")>=0),g;ac=function(r){g=r};if(f){Wb=function(){return Pb(l)};Xb=function(r){Rb(l,r)};Yb=function(){return Pb(n)};Zb=function(r){Rb(n,r)};$b=function(){return Pb(p)};bc=function(){Rb(p,c())};cc=function(){return Pb(G)};dc=function(r){Rb(G,r)};ec=function(){return Pb(t)};fc=function(r){Rb(t,r)};
-var l=new L(0,600);l.C=a;var n=new L(0,600);n.C=b;var p=new L(0,600);p.C=c;var G=new L(0,600);G.C=d;var t=new L(0,600);t.C=e}else{Wb=a;Xb=ba;Yb=b;Zb=ba;$b=c;bc=ba;cc=d;dc=ba;ec=e;fc=ba}})();var gc={},M={},N={},hc={},O=function(a,b,c,d,e){if(b)if(q(b)){for(var f=0;f<b.length;f++)O(a,b[f],c,d,e);return j}else{d=!!d;var g=M;b in g||(g[b]=Wb());g=g[b];if(!(d in g)){g[d]=Wb();g.j++}g=g[d];var l=ia(a),n;g.v++;if(g[l]){n=g[l];for(f=0;f<n.length;f++){g=n[f];if(g.ca==c&&g.Ca==e){if(g.ha)break;return n[f].key}}}else{n=g[l]=Yb();g.j++}f=$b();f.src=a;g=cc();g.Da(c,f,a,b,d,e);c=g.key;f.key=c;n.push(g);gc[c]=g;N[l]||(N[l]=Yb());N[l].push(g);if(a.addEventListener){if(a==o||!a.ib)a.addEventListener(b,
-f,d)}else a.attachEvent(ic(b),f);return c}else h(Error("Invalid event type"))},jc=function(a,b,c,d,e){if(q(b)){for(var f=0;f<b.length;f++)jc(a,b[f],c,d,e);return j}a=O(a,b,c,d,e);gc[a].Oa=i;return a},kc=function(a,b,c,d,e){if(q(b)){for(var f=0;f<b.length;f++)kc(a,b[f],c,d,e);return j}d=!!d;a=lc(a,b,d);if(!a)return k;for(f=0;f<a.length;f++)if(a[f].ca==c&&a[f].capture==d&&a[f].Ca==e)return P(a[f].key);return k},P=function(a){if(!gc[a])return k;var b=gc[a];if(b.ha)return k;var c=b.src,d=b.type,e=b.Db,
-f=b.capture;if(c.removeEventListener){if(c==o||!c.ib)c.removeEventListener(d,e,f)}else c.detachEvent&&c.detachEvent(ic(d),e);c=ia(c);e=M[d][f][c];if(N[c]){var g=N[c];Da(g,b);g.length==0&&delete N[c]}b.ha=i;e.zb=i;mc(d,f,c,e);delete gc[a];return i},mc=function(a,b,c,d){if(!d.Fa)if(d.zb){for(var e=0,f=0;e<d.length;e++)if(d[e].ha){var g=d[e].Db;g.src=j;bc(g);dc(d[e])}else{if(e!=f)d[f]=d[e];f++}d.length=f;d.zb=k;if(f==0){Zb(d);delete M[a][b][c];M[a][b].j--;if(M[a][b].j==0){Xb(M[a][b]);delete M[a][b];
-M[a].j--}if(M[a].j==0){Xb(M[a]);delete M[a]}}}},nc=function(a,b,c){var d=0,e=a==j,f=b==j,g=c==j;c=!!c;if(e)Na(N,function(n){for(var p=n.length-1;p>=0;p--){var G=n[p];if((f||b==G.type)&&(g||c==G.capture)){P(G.key);d++}}});else{a=ia(a);if(N[a]){a=N[a];for(e=a.length-1;e>=0;e--){var l=a[e];if((f||b==l.type)&&(g||c==l.capture)){P(l.key);d++}}}}return d},lc=function(a,b,c){var d=M;if(b in d){d=d[b];if(c in d){d=d[c];a=ia(a);if(d[a])return d[a]}}return j},ic=function(a){if(a in hc)return hc[a];return hc[a]=
-"on"+a},pc=function(a,b,c,d,e){var f=1;b=ia(b);if(a[b]){a.v--;a=a[b];if(a.Fa)a.Fa++;else a.Fa=1;try{for(var g=a.length,l=0;l<g;l++){var n=a[l];if(n&&!n.ha)f&=oc(n,e)!==k}}finally{a.Fa--;mc(c,d,b,a)}}return Boolean(f)},oc=function(a,b){var c=a.handleEvent(b);a.Oa&&P(a.key);return c};
-ac(function(a,b){if(!gc[a])return i;var c=gc[a],d=c.type,e=M;if(!(d in e))return i;e=e[d];var f,g;if(Jb===undefined)Jb=z&&!o.addEventListener;if(Jb){var l;if(!(l=b))a:{l="window.event".split(".");for(var n=o;f=l.shift();)if(n[f])n=n[f];else{l=j;break a}l=n}f=l;l=i in e;n=k in e;if(l){if(f.keyCode<0||f.returnValue!=undefined)return i;a:{var p=k;if(f.keyCode==0)try{f.keyCode=-1;break a}catch(G){p=i}if(p||f.returnValue==undefined)f.returnValue=i}}p=ec();p.Da(f,this);f=i;try{if(l){for(var t=Yb(),r=p.currentTarget;r;r=
-r.parentNode)t.push(r);g=e[i];g.v=g.j;for(var D=t.length-1;!p.U&&D>=0&&g.v;D--){p.currentTarget=t[D];f&=pc(g,t[D],d,i,p)}if(n){g=e[k];g.v=g.j;for(D=0;!p.U&&D<t.length&&g.v;D++){p.currentTarget=t[D];f&=pc(g,t[D],d,k,p)}}}else f=oc(c,p)}finally{if(t){t.length=0;Zb(t)}p.u();fc(p)}return f}d=new K(b,this);try{f=oc(c,d)}finally{d.u()}return f});var Q=function(a){this.$a=a};u(Q,Mb);
-var qc=new L(0,100),R=function(a,b,c,d,e,f){if(q(c))for(var g=0;g<c.length;g++)R(a,b,c[g],d,e,f);else rc(a,O(b,c,d||a,e||k,f||a.$a||a));return a},sc=function(a,b,c,d,e,f){if(q(c))for(var g=0;g<c.length;g++)sc(a,b,c[g],d,e,f);else rc(a,jc(b,c,d||a,e||k,f||a.$a||a));return a},rc=function(a,b){if(a.a)a.a[b]=i;else if(a.M){a.a=Pb(qc);a.a[a.M]=i;a.M=j;a.a[b]=i}else a.M=b},tc=function(a,b,c,d,e,f){if(a.M||a.a)if(q(c))for(var g=0;g<c.length;g++)tc(a,b,c[g],d,e,f);else{a:{d=d||a;f=f||a.$a||a;e=!!(e||k);if(b=
-lc(b,c,e))for(c=0;c<b.length;c++)if(b[c].ca==d&&b[c].capture==e&&b[c].Ca==f){b=b[c];break a}b=j}if(b){b=b.key;P(b);if(a.a)Qa(a.a,b);else if(a.M==b)a.M=j}}return a};Q.prototype.ga=function(){if(this.a){for(var a in this.a){P(a);delete this.a[a]}Rb(qc,this.a);this.a=j}else this.M&&P(this.M)};Q.prototype.g=function(){Q.l.g.call(this);this.ga()};Q.prototype.handleEvent=function(){h(Error("EventHandler.handleEvent not implemented"))};var S=function(){};u(S,Mb);m=S.prototype;m.ib=i;m.Ha=j;m.db=function(a){this.Ha=a};m.addEventListener=function(a,b,c,d){O(this,a,b,c,d)};m.removeEventListener=function(a,b,c,d){kc(this,a,b,c,d)};
-m.dispatchEvent=function(a){a=a;if(s(a))a=new J(a,this);else if(a instanceof J)a.target=a.target||this;else{var b=a;a=new J(a.type,this);Sa(a,b)}b=1;var c,d=a.type,e=M;if(d in e){e=e[d];d=i in e;var f;if(d){c=[];for(f=this;f;f=f.Ha)c.push(f);f=e[i];f.v=f.j;for(var g=c.length-1;!a.U&&g>=0&&f.v;g--){a.currentTarget=c[g];b&=pc(f,c[g],a.type,i,a)&&a.qa!=k}}if(k in e){f=e[k];f.v=f.j;if(d)for(g=0;!a.U&&g<c.length&&f.v;g++){a.currentTarget=c[g];b&=pc(f,c[g],a.type,k,a)&&a.qa!=k}else for(c=this;!a.U&&c&&
-f.v;c=c.Ha){a.currentTarget=c;b&=pc(f,c,a.type,k,a)&&a.qa!=k}}a=Boolean(b)}else a=i;return a};m.g=function(){S.l.g.call(this);nc(this);this.Ha=j};var uc=function(a){a=String(a);var b;b=/^\s*$/.test(a)?k:/^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g,""));if(b)try{return eval("("+a+")")}catch(c){}h(Error("Invalid JSON string: "+a))},vc=function(){},xc=function(a,b,c){switch(typeof b){case "string":wc(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");
-break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==j){c.push("null");break}if(q(b)){var d=b.length;c.push("[");for(var e="",f=0;f<d;f++){c.push(e);xc(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(b.hasOwnProperty(e)){f=b[e];if(typeof f!="function"){c.push(d);wc(a,e,c);c.push(":");xc(a,f,c);d=","}}c.push("}");break;case "function":break;default:h(Error("Unknown type: "+typeof b))}},yc={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f",
-"\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},zc=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g,wc=function(a,b,c){c.push('"',b.replace(zc,function(d){if(d in yc)return yc[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return yc[d]=f+e.toString(16)}),'"')};var Ac=function(a){this.w=Sb?[]:"";a!=j&&this.append.apply(this,arguments)};Ac.prototype.i=function(a){this.clear();this.append(a)};if(Sb){Ac.prototype.Na=0;Ac.prototype.append=function(a,b){if(b==j)this.w[this.Na++]=a;else{this.w.push.apply(this.w,arguments);this.Na=this.w.length}return this}}else Ac.prototype.append=function(a,b){this.w+=a;if(b!=j)for(var c=1;c<arguments.length;c++)this.w+=arguments[c];return this};Ac.prototype.clear=function(){if(Sb)this.Na=this.w.length=0;else this.w=""};
-Ac.prototype.toString=function(){if(Sb){var a=this.w.join("");this.clear();a&&this.append(a);return a}else return this.w};var Bc=function(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d};Bc.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};var Dc=function(a,b,c){a.style[Cc(c)]=b},Ec=function(a,b){var c=F(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,""))return c[b];return j},T=function(a,b){return Ec(a,b)||(a.currentStyle?a.currentStyle[b]:j)||a.style[b]},Gc=function(a,b,c){var d,e=A&&(Za||gb)&&C("1.9");if(b instanceof Ma){d=b.x;b=b.y}else{d=b;b=c}a.style.left=Fc(d,e);a.style.top=Fc(b,e)},Hc=function(a){if(z)return a.offsetParent;var b=F(a),c=T(a,"position"),d=c=="fixed"||c=="absolute";for(a=
-a.parentNode;a&&a!=b;a=a.parentNode){c=T(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return j},Ic=function(a){var b,c=F(a),d=T(a,"position"),e=A&&c.getBoxObjectFor&&!a.getBoundingClientRect&&d=="absolute"&&(b=c.getBoxObjectFor(a))&&(b.screenX<0||b.screenY<0),f=new Ma(0,0),g;b=c?c.nodeType==9?c:F(c):document;if(g=z){g=H(b);g=!tb(g.h)}g=g?b.body:b.documentElement;if(a==g)return f;
-if(a.getBoundingClientRect){d=a.getBoundingClientRect();if(z){a=a.ownerDocument;d.left-=a.documentElement.clientLeft+a.body.clientLeft;d.top-=a.documentElement.clientTop+a.body.clientTop}b=d;c=Hb(H(c));f.x=b.left+c.x;f.y=b.top+c.y}else if(c.getBoxObjectFor&&!e){b=c.getBoxObjectFor(a);c=c.getBoxObjectFor(g);f.x=b.screenX-c.screenX;f.y=b.screenY-c.screenY}else{e=a;do{f.x+=e.offsetLeft;f.y+=e.offsetTop;if(e!=a){f.x+=e.clientLeft||0;f.y+=e.clientTop||0}if(B&&T(e,"position")=="fixed"){f.x+=c.body.scrollLeft;
-f.y+=c.body.scrollTop;break}e=e.offsetParent}while(e&&e!=a);if(db||B&&d=="absolute")f.y-=c.body.offsetTop;for(e=a;(e=Hc(e))&&e!=c.body&&e!=g;){f.x-=e.scrollLeft;if(!db||e.tagName!="TR")f.y-=e.scrollTop}}return f},Jc=function(a,b,c){if(b instanceof y){c=b.height;b=b.width}else{if(c==undefined)h(Error("missing height argument"));c=c}a.style.width=Fc(b,i);a.style.height=Fc(c,i)},Fc=function(a,b){if(typeof a=="number")a=(b?Math.round(a):a)+"px";return a},Kc=function(a){var b=db&&!C("10");if(T(a,"display")!=
-"none")return b?new y(a.offsetWidth||a.clientWidth,a.offsetHeight||a.clientHeight):new y(a.offsetWidth,a.offsetHeight);var c=a.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";if(b){b=a.offsetWidth||a.clientWidth;a=a.offsetHeight||a.clientHeight}else{b=a.offsetWidth;a=a.offsetHeight}c.display=d;c.position=f;c.visibility=e;return new y(b,a)},Lc={},Cc=function(a){return Lc[a]||(Lc[a]=String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()}))},
-Mc=function(a,b){var c=a.style;if("opacity"in c)c.opacity=b;else if("MozOpacity"in c)c.MozOpacity=b;else if("filter"in c)c.filter=b===""?"":"alpha(opacity="+b*100+")"},U=function(a,b){a.style.display=b?"":"none"},Nc=function(a,b){if(z)a.cssText=b;else a[B?"innerText":"innerHTML"]=b};var Oc=function(a){this.b=a;a=z?"focusout":"blur";this.nc=O(this.b,z?"focusin":"focus",this,!z);this.oc=O(this.b,a,this,!z)};u(Oc,S);Oc.prototype.handleEvent=function(a){var b=new K(a.G);b.type=a.type=="focusin"||a.type=="focus"?"focusin":"focusout";try{this.dispatchEvent(b)}finally{b.u()}};Oc.prototype.g=function(){Oc.l.g.call(this);P(this.nc);P(this.oc);delete this.b};var Pc=function(a,b,c){this.target=a;this.handle=b||a;this.ab=c||new Bc(NaN,NaN,NaN,NaN);this.h=F(a);this.m=new Q(this);O(this.handle,"mousedown",this.Fb,k,this)};u(Pc,S);var Qc=z||A&&C("1.9.3");m=Pc.prototype;m.screenX=0;m.screenY=0;m.Gb=0;m.Hb=0;m.ja=0;m.ka=0;m.mb=i;m.L=k;m.sb=0;m.qc=0;m.lc=k;m.Y=function(){return this.m};m.g=function(){Pc.l.g.call(this);kc(this.handle,"mousedown",this.Fb,k,this);this.m.u();delete this.target;delete this.handle;delete this.m};
-m.Fb=function(a){if(this.mb&&!this.L&&(a.type!="mousedown"||(Kb?a.G.button==0:a.type=="click"?i:!!(a.G.button&Ob[0])))){if(this.sb==0){Rc(this,a);if(this.L)a.preventDefault();else return}else a.preventDefault();var b=this.h,c=b.documentElement,d=!Qc;R(this.m,b,"mousemove",this.rc,d);R(this.m,b,"mouseup",this.ya,d);if(Qc){c.setCapture(k);R(this.m,c,"losecapture",this.ya)}else R(this.m,yb(b),"blur",this.ya);z&&this.lc&&R(this.m,b,"dragstart",Nb);this.Ec&&R(this.m,this.Ec,"scroll",this.vc,d);this.screenX=
-this.Gb=a.screenX;this.screenY=this.Hb=a.screenY;this.ja=this.target.offsetLeft;this.ka=this.target.offsetTop;this.pa=Hb(H(this.h));this.qc=la()}};var Rc=function(a,b){if(a.dispatchEvent(new Sc("start",a,b.clientX,b.clientY,b))!==k)a.L=i};Pc.prototype.ya=function(a,b){this.m.ga();Qc&&this.h.releaseCapture();if(this.L){this.L=k;this.dispatchEvent(new Sc("end",this,a.clientX,a.clientY,a,Tc(this,this.ja),Uc(this,this.ka),b))}};
-Pc.prototype.rc=function(a){if(this.mb){var b=a.screenX-this.screenX,c=a.screenY-this.screenY;this.screenX=a.screenX;this.screenY=a.screenY;if(!this.L){var d=this.Gb-this.screenX,e=this.Hb-this.screenY;if(d*d+e*e>this.sb){Rc(this,a);if(!this.L){this.ya(a);return}}}c=Vc(this,b,c);b=c.x;c=c.y;if(this.L)if(this.dispatchEvent(new Sc("beforedrag",this,a.clientX,a.clientY,a,b,c))!==k){Wc(this,a,b,c,k);a.preventDefault()}}};
-var Vc=function(a,b,c){var d=Hb(H(a.h));b+=d.x-a.pa.x;c+=d.y-a.pa.y;a.pa=d;a.ja+=b;a.ka+=c;return new Ma(Tc(a,a.ja),Uc(a,a.ka))};Pc.prototype.vc=function(a){var b=Vc(this,0,0);a.clientX=this.pa.x-this.screenX;a.clientY=this.pa.x-this.screenY;Wc(this,a,b.x,b.y,i)};
-var Wc=function(a,b,c,d){a.target.style.left=c+"px";a.target.style.top=d+"px";a.dispatchEvent(new Sc("drag",a,b.clientX,b.clientY,b,c,d))},Tc=function(a,b){var c=a.ab,d=!isNaN(c.left)?c.left:j;c=!isNaN(c.width)?c.width:0;return Math.min(d!=j?d+c:Infinity,Math.max(d!=j?d:-Infinity,b))},Uc=function(a,b){var c=a.ab,d=!isNaN(c.top)?c.top:j;c=!isNaN(c.height)?c.height:0;return Math.min(d!=j?d+c:Infinity,Math.max(d!=j?d:-Infinity,b))},Sc=function(a,b,c,d,e,f,g,l){J.call(this,a);this.clientX=c;this.clientY=
-d;this.Kc=e;this.left=f!==undefined?f:b.ja;this.top=g!==undefined?g:b.ka;this.Mc=b;this.Lc=!!l};u(Sc,J);var Xc=function(a){if(typeof a.Ba=="function")return a.Ba();if(s(a))return a.split("");if(da(a)){for(var b=[],c=a.length,d=0;d<c;d++)b.push(a[d]);return b}return Oa(a)},Yc=function(a,b,c){if(typeof a.forEach=="function")a.forEach(b,c);else if(da(a)||s(a))za(a,b,c);else{var d;if(typeof a.Ya=="function")d=a.Ya();else if(typeof a.Ba!="function")if(da(a)||s(a)){d=[];for(var e=a.length,f=0;f<e;f++)d.push(f);d=d}else d=Pa(a);else d=void 0;e=Xc(a);f=e.length;for(var g=0;g<f;g++)b.call(c,e[g],d&&d[g],a)}};var Zc=function(a){this.N={};this.a=[];var b=arguments.length;if(b>1){if(b%2)h(Error("Uneven number of arguments"));for(var c=0;c<b;c+=2)this.i(arguments[c],arguments[c+1])}else if(a){if(a instanceof Zc){b=a.Ya();c=a.Ba()}else{b=Pa(a);c=Oa(a)}for(var d=0;d<b.length;d++)this.i(b[d],c[d])}};m=Zc.prototype;m.j=0;m.La=0;m.Ba=function(){$c(this);for(var a=[],b=0;b<this.a.length;b++)a.push(this.N[this.a[b]]);return a};m.Ya=function(){$c(this);return this.a.concat()};m.Ea=function(){return this.j==0};
-m.clear=function(){this.N={};this.La=this.j=this.a.length=0};var $c=function(a){if(a.j!=a.a.length){for(var b=0,c=0;b<a.a.length;){var d=a.a[b];if(Object.prototype.hasOwnProperty.call(a.N,d))a.a[c++]=d;b++}a.a.length=c}if(a.j!=a.a.length){var e={};for(c=b=0;b<a.a.length;){d=a.a[b];if(!Object.prototype.hasOwnProperty.call(e,d)){a.a[c++]=d;e[d]=1}b++}a.a.length=c}},ad=function(a,b,c){if(Object.prototype.hasOwnProperty.call(a.N,b))return a.N[b];return c};
-Zc.prototype.i=function(a,b){if(!Object.prototype.hasOwnProperty.call(this.N,a)){this.j++;this.a.push(a);this.La++}this.N[a]=b};Zc.prototype.Ma=function(a){$c(this);var b=0,c=this.a,d=this.N,e=this.La,f=this,g=new Ja;g.next=function(){for(;;){if(e!=f.La)h(Error("The map has changed since the iterator was created"));if(b>=c.length)h(x);var l=c[b++];return a?l:d[l]}};return g};var bd=o.window;var cd=function(){};(function(a){a.pb=function(){return a.mc||(a.mc=new a)}})(cd);cd.prototype.Ab=0;cd.pb();var V=function(a){this.xa=a||H();this.Bc=dd};u(V,S);V.prototype.tb=cd.pb();var dd=j;m=V.prototype;m.aa=j;m.H=k;m.b=j;m.Bc=j;m.pc=j;m.fa=j;m.ua=j;m.ta=j;m.Jc=k;m.c=function(){return this.b};m.Y=function(){return this.$||(this.$=new Q(this))};m.db=function(a){if(this.fa&&this.fa!=a)h(Error("Method not supported"));V.l.db.call(this,a)};m.n=function(){return this.xa};m.k=function(){this.b=this.xa.createElement("div")};
-m.ia=function(a){if(this.H)h(Error("Component already rendered"));this.b||this.k();a?a.insertBefore(this.b,j):this.xa.h.body.appendChild(this.b);if(!this.fa||this.fa.H)this.za()};m.za=function(){this.H=i;ed(this,function(a){!a.H&&a.c()&&a.za()})};m.ma=function(){ed(this,function(a){a.H&&a.ma()});this.$&&this.$.ga();this.H=k};
-m.g=function(){V.l.g.call(this);this.H&&this.ma();if(this.$){this.$.u();delete this.$}ed(this,function(a){a.u()});!this.Jc&&this.b&&Db(this.b);this.fa=this.pc=this.b=this.ta=this.ua=j};var ed=function(a,b,c){a.ua&&za(a.ua,b,c)};
-V.prototype.removeChild=function(a,b){if(a){var c=s(a)?a:a.aa||(a.aa=":"+(a.tb.Ab++).toString(36)),d;if(this.ta&&c){d=this.ta;d=c in d?d[c]:void 0;d=d||j}else d=j;a=d;if(c&&a){Qa(this.ta,c);Da(this.ua,a);if(b){a.ma();a.b&&Db(a.b)}c=a;if(c==j)h(Error("Unable to set parent component"));c.fa=j;V.l.db.call(c,j)}}if(!a)h(Error("Child is not in parent component"));return a};var W=function(a,b,c){V.call(this,c);this.t=a||"modal-dialog";this.gb=!!b;this.s=fd};u(W,V);m=W.prototype;m.Aa=j;m.Yb=i;m.qb=i;m.gb=k;m.oa=i;m.lb=i;m.Rb=0.5;m.Mb="";m.Ra="";m.s=j;m.W=j;m.hb=k;m.Wb=k;m.f=j;m.d=j;m.Ka=j;m.sa=j;m.Lb=j;m.Ja=j;m.va=j;m.z=j;
-m.k=function(){gd(this);var a=this.n();this.b=a.k("div",{className:this.t,tabIndex:0},this.Ka=a.k("div",{className:this.t+"-title",id:this.aa||(this.aa=":"+(this.tb.Ab++).toString(36))},this.sa=a.k("span",this.t+"-title-text",this.Mb),this.Ja=a.k("span",this.t+"-title-close")),this.va=a.k("div",this.t+"-content"),this.z=a.k("div",this.t+"-buttons"),this.Jb=a.k("span",{tabIndex:0}));this.Lb=this.Ka.id;a=this.c();if(A){a.setAttribute("role","dialog");a.Cc="dialog"}A&&this.c().setAttribute("aria-labelledby",
-this.Lb||"");if(this.Ra)this.va.innerHTML=this.Ra;U(this.Ja,this.qb);U(this.c(),k);if(this.s){a=this.s;a.b=this.z;a.ia()}};var gd=function(a){if(a.gb&&a.oa&&!a.d){var b;b=a.n().k("iframe",{frameborder:0,style:"border:0;vertical-align:bottom;",src:'javascript:""'});a.d=b;a.d.className=a.t+"-bg";U(a.d,k);Mc(a.d,0)}else if((!a.gb||!a.oa)&&a.d){Db(a.d);a.d=j}if(a.oa&&!a.f){a.f=a.n().k("div",a.t+"-bg");Mc(a.f,a.Rb);U(a.f,k)}else if(!a.oa&&a.f){Db(a.f);a.f=j}};
-W.prototype.ia=function(a){if(this.H)h(Error("Component already rendered"));this.c()||this.k();a=a||Gb(this.n()).body;this.d&&a.appendChild(this.d);this.f&&a.appendChild(this.f);W.l.ia.call(this,a)};
-W.prototype.za=function(){W.l.za.call(this);this.Aa=new Oc(Gb(this.n()));if(this.lb&&!this.W){var a=new Pc(this.c(),this.Ka);sb(this.Ka,this.t+"-title-draggable");this.W=a}R(R(this.Y(),this.Ja,"click",this.wc),this.Aa,"focusin",this.uc);a=this.c();if(A){a.setAttribute("role","dialog");a.Cc="dialog"}this.sa.id!==""&&A&&this.c().setAttribute("aria-labelledby",this.sa.id)};W.prototype.ma=function(){this.hb&&hd(this,k);this.Aa.u();this.Aa=j;if(this.W){this.W.u();this.W=j}W.l.ma.call(this)};
-var hd=function(a,b){if(b!=a.hb){var c=Gb(a.n()),d=yb(c)||window;a.H||a.ia(c.body);if(b){id(a);jd(a);R(R(R(a.Y(),a.c(),"keydown",a.Ga,i),a.c(),"keypress",a.Ga,i),d,"resize",a.Cb,i)}else tc(tc(tc(a.Y(),a.c(),"keydown",a.Ga,i),a.c(),"keypress",a.Ga,i),d,"resize",a.Cb,i);a.d&&U(a.d,b);a.f&&U(a.f,b);U(a.c(),b);b&&a.focus();if(a.hb=b)R(a.Y(),a.z,"click",a.Bb);else{tc(a.Y(),a.z,"click",a.Bb);a.dispatchEvent("afterhide");a.Wb&&a.u()}}};
-W.prototype.focus=function(){try{this.c().focus()}catch(a){}if(this.s){var b=this.s.wa;if(b)for(var c=Gb(this.n()),d=this.z.getElementsByTagName("button"),e=0,f;f=d[e];e++)if(f.name==b){try{if(B||db){var g=c.createElement("input");g.style.cssText="position:fixed;width:0;height:0;left:0;top:0;";this.c().appendChild(g);g.focus();this.c().removeChild(g)}f.focus()}catch(l){}break}}};
-var id=function(a){a.d&&U(a.d,k);a.f&&U(a.f,k);var b=Gb(a.n()),c=xb(yb(b)||window||window),d=Math.max(b.body.scrollWidth,c.width);b=Math.max(b.body.scrollHeight,c.height);if(a.d){U(a.d,i);Jc(a.d,d,b)}if(a.f){U(a.f,i);Jc(a.f,d,b)}if(a.lb){c=Kc(a.c());a.W.ab=new Bc(0,0,d-c.width,b-c.height)}},jd=function(a){var b=Gb(a.n()),c=yb(b)||window;if(T(a.c(),"position")=="fixed")var d=b=0;else{d=Hb(a.n());b=d.x;d=d.y}var e=Kc(a.c());c=xb(c||window);Gc(a.c(),Math.max(b+c.width/2-e.width/2,0),Math.max(d+c.height/
-2-e.height/2,0))};m=W.prototype;m.wc=function(){if(this.qb){var a=this.s,b=a&&a.Pa;if(b)this.dispatchEvent(new kd(b,ad(a,b)))&&hd(this,k);else hd(this,k)}};m.g=function(){W.l.g.call(this);if(this.f){Db(this.f);this.f=j}if(this.d){Db(this.d);this.d=j}this.Jb=this.z=this.Ja=j};m.Bb=function(a){a:{for(a=a.target;a!=j&&a!=this.z;){if(a.tagName=="BUTTON"){a=a;break a}a=a.parentNode}a=j}if(a&&!a.disabled){a=a.name;this.dispatchEvent(new kd(a,ad(this.s,a)))&&hd(this,k)}};
-m.Ga=function(a){var b=k,c=k,d=this.s,e=a.target;if(a.type=="keydown")if(this.Yb&&a.keyCode==27){var f=d&&d.Pa;e=e.tagName=="SELECT"&&!e.disabled;if(f&&!e){c=i;b=this.dispatchEvent(new kd(f,ad(d,f)))}else e||(b=i)}else{if(a.keyCode==9&&a.shiftKey&&e==this.c())c=i}else if(a.keyCode==13){if(e.tagName=="BUTTON")f=e.name;else if(d){var g=d.wa,l;if(l=g)a:{l=d.b.getElementsByTagName("BUTTON");for(var n=0,p;p=l[n];n++)if(p.name==g||p.id==g){l=p;break a}l=j}l=l;e=(e.tagName=="TEXTAREA"||e.tagName=="SELECT")&&
-!e.disabled;if(l&&!l.disabled&&!e)f=g}if(f){c=i;b=this.dispatchEvent(new kd(f,String(ad(d,f))))}}if(b||c){a.stopPropagation();a.preventDefault()}b&&hd(this,k)};m.Cb=function(){id(this)};m.uc=function(a){if(this.Jb==a.target){a=this.ac;if(ea(a)){if(this)a=ja(a,this)}else if(a&&typeof a.handleEvent=="function")a=ja(a.handleEvent,a);else h(Error("Invalid listener argument"));bd.setTimeout(a,0)}};m.ac=function(){z&&Gb(this.n()).body.focus();this.c().focus()};
-var kd=function(a,b){this.type="dialogselect";this.key=a;this.caption=b};u(kd,J);var X=function(a){this.xa=a||H();Zc.call(this)},fd;u(X,Zc);m=X.prototype;m.t="goog-buttonset";m.wa=j;m.b=j;m.Pa=j;m.i=function(a,b,c,d){Zc.prototype.i.call(this,a,b);if(c)this.wa=a;if(d)this.Pa=a;return this};m.ia=function(){if(this.b){this.b.innerHTML="";var a=H(this.b);Yc(this,function(b,c){var d=a.k("button",{name:c},b);if(c==this.wa)d.className=this.t+"-default";this.b.appendChild(d)},this)}};
-(new X).i("ok","OK",i,i);fd=(new X).i("ok","OK",i).i("cancel","Cancel",k,i);(new X).i("yes","Yes",i).i("no","No",k,i);(new X).i("yes","Yes").i("no","No",i).i("cancel","Cancel",k,i);(new X).i("continue","Continue").i("save","Save").i("cancel","Cancel",i,i);var ld=RegExp("[\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc](?:[^A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]*[\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc])?","g"),md=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff](?:[^\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]*[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff])?",
-"g"),nd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff]"),od=RegExp("[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff][\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*$"),
-pd=RegExp("[\u0000-\u001f\u0085\u00a0\u1680\u180e\u2000-\u200f\u2028\u2029\u202f\u205f\u3000]"),qd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\u200e]+$"),rd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\u200f]+$"),
-sd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*\\d"),td=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]"),ud=function(a,b){this.text=a;this.index=b},vd=function(a){for(var b=[],c;c=ld.exec(a);)b.push(new ud(c[0],
-c.index));return b},wd=function(a){for(var b=[],c;c=md.exec(a);)b.push(new ud(c[0],c.index));return b},xd=function(a){if(a=sd.exec(a))return new ud(a[0],0);return j},yd={"\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t",'"':'\\"',"'":"\\'","\\":"\\\\"},zd=function(a){for(var b=[],c=0;c<a.length;c++){var d=b,e=c,f;f=a.charAt(c);if(f in yd)f=yd[f];else{var g=f;if(pd.test(f)){var l=f.charCodeAt(0);g="\\u";if(l<4096){g+="0";if(l<256){g+="0";if(l<16)g+="0"}}g+=l.toString(16)}f=yd[f]=g}d[e]=
-f}return b.join("")},Ad=function(a){return a.nodeName+"="+("'"+zd(a.nodeValue)+"'")},Bd=function(a){var b=[];if(a.attributes)for(var c=0;c<a.attributes.length;++c){var d=a.attributes[c];if(d.specified===undefined||d.specified)b.push(d)}a=[a.nodeName.toLowerCase()];b=Ba(b,Ad);b.sort();a=a.concat(b);return"<"+a.join(" ")+">"},Cd=function(a){var b=[];for(a=a;a;a=a.parentNode){b.push(Bd(a));if(a.id||a.nodeName=="BODY")break}b.reverse();return b.join("")},Dd=function(a){var b=[],c=new I(a);La(c,function(){c.r.nodeType==
-3&&b.push(c.r.data)});return b.join("")},Ed=Ta("ADDRESS","BLOCKQUOTE","BODY","CAPTION","CENTER","COL","COLGROUP","DIR","DIV","DL","DD","DT","FIELDSET","FORM","H1","H2","H3","H4","H5","H6","HR","ISINDEX","OL","LI","MAP","MENU","OPTGROUP","OPTION","P","PRE","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","TL","UL"),Fd=Ta("inline","inline-block","inline-table"),Gd={element:j,style:j},Hd=function(a){if(Gd.element==a)return Gd.style;var b=(a.currentStyle?a.currentStyle.display:j)||Ec(a,"display");Gd={element:a,
-style:b};return b},Id=function(a){var b=Hd(a);return b?!Fd[b]:!!Ed[a.tagName]},Jd=function(a){if(a.nodeType==1){if(a.nodeName=="SCRIPT"||a.nodeName=="STYLE")return k;return Hd(a)!="none"}return i};var Kd=function(a,b,c){this.T=a;this.Gc=b;this.Xb=c;this.S=[]};Kd.prototype.rb=function(){if(this.S.length==0)for(var a=0;a<this.T.length;++a)this.S.push(Ld(this.T[a],a==0?this.Gc:0,a==this.T.length-1?this.Xb:this.T[a].length));else for(a=0;a<this.S.length;++a)Eb(this.S[a],this.T[a]);return Ic(this.S[0])};Kd.prototype.Nb=function(){if(this.S.length!=0)for(var a=0;a<this.T.length;++a)Eb(this.T[a],this.S[a])};
-var Ld=function(a,b,c){b=b||0;c=c||a.data.length;var d=[];b>0&&d.push(a.data.substring(0,b));d.push(Ab("span",{style:"color:red; background-color:yellow"},a.data.substring(b,c)));c<a.data.length&&d.push(a.data.substring(c));b=Ab("span",j,d);Eb(b,a);return b};var Md=function(a){this.b=a};Md.prototype.cb=j;Md.prototype.rb=function(){this.cb=T(this.b,"backgroundColor");var a=this.b;s("background-color")?Dc(a,"yellow","background-color"):Na("background-color",ka(Dc,a));return Ic(this.b)};Md.prototype.Nb=function(){if(this.cb!=j){var a=this.b;s("background-color")?Dc(a,this.cb,"background-color"):Na("background-color",ka(Dc,a))}};var Y=function(a,b,c,d){if(typeof a=="object"){b=["id","type","severity","atText","locationDescription","precededByText","followedByText"];c=["id","type","severity"];for(d=0;d<b.length;++d){var e=b[d];this[e]=e in a?a[e]:j;if(this[e]==j&&ya(c,e)>=0)h("Required field '"+e+"' not found in bidichecker.Error.")}}else{if(b==undefined)h("Required parameter 'opt_severity' not found in bidichecker.Error.");this.id=Nd++;this.type=a;this.severity=b;Od[this.id]=c||j;this.atText=d||j}};
-Y.prototype.precededByText=j;Y.prototype.followedByText=j;Y.prototype.locationDescription=j;Y.prototype.asString=j;var Nd=0,Od=[];Y.prototype.Z=function(){return Od[this.id]||j};Y.prototype.toString=function(){var a=new Ac("[",this.severity.toString(),"] ",this.type),b;if(b=this.atText)a.append(": ","'"+zd(b)+"'");if(b=this.precededByText)a.append(" preceded by ","'"+zd(b)+"'");if(b=this.followedByText)a.append(" followed by ","'"+zd(b)+"'");if(b=this.locationDescription)a.append(" in ",b);return a.toString()};var Pd=function(a){this.A=a;this.q=0;this.ob=this.Q=this.P=j};Pd.prototype.ic=function(){var a;if(/[^0-9]/.test(this.Q.value))a=-1;else{a=this.Q.value;var b=Number(a);a=b==0&&/^[\s\xa0]*$/.test(a)?NaN:b;a=a-1}a=a;if(a>=0&&a<this.A.length&&a!=this.q){Qd(this);this.q=a;this.Q.value=this.q+1;Rd(this)}else this.Q.value=this.q+1};Pd.prototype.ec=function(a){a=a.key=="next"?this.q==this.A.length-1?0:this.q+1:this.q==0?this.A.length-1:this.q-1;Qd(this);this.q=a;this.Q.value=this.q+1;Rd(this);return k};
-var Rd=function(a){var b=a.A[a.q],c=b.Z();if(c){var d=c.rb();c=window.scrollY;window.scrollTo(0,d.y-100);d=new Ma(a.P.offsetLeft,a.P.offsetTop);Gc(a.P,d.x,d.y+(window.scrollY-c))}Fb(a.ob,b.toString())},Qd=function(a){(a=a.A[a.q].Z())&&a.Nb()};var Sd=function(a,b){this.Qa=a;this.r=b},Td=function(a){this.ea=[new Sd(0,a)];this.xb=a};Td.prototype.append=function(a,b){if(this.xb!=b){this.ea.push(new Sd(a,b));this.xb=b}};var Ud=function(a,b){var c=Ha(a.ea,function(d,e){return d-e.Qa}||Ia,k,b);return c>=0?c:-c-2};Td.prototype.Va=function(a){return this.ea[Ud(this,a)].r};Td.prototype.Z=function(a,b){for(var c=Ud(this,a),d=Ud(this,a+b-1),e=[],f=c;f<=d;++f)e.push(this.ea[f].r);return new Kd(e,a-this.ea[c].Qa,a+b-this.ea[d].Qa)};
-var Vd=function(a,b,c,d,e){this.wb=b;this.ub=e;this.Sb=d;this.fb=[a];this.Kb=a.length;this.bb=new Td(c)};Vd.prototype.Ia=j;Vd.prototype.Ea=function(){return Ca(this.fb,function(a){return a.length==0})};Vd.prototype.append=function(a,b){this.bb.append(this.Kb,b);this.Kb+=a.length;this.fb.push(a);this.Ia=j};var Wd=function(a){if(a.Ia===j)a.Ia=a.fb.join("");return a.Ia};Vd.prototype.Va=function(a){return this.bb.Va(a)};Vd.prototype.Z=function(a,b){return this.bb.Z(a,b)};var Xd=new Vd("",k,j,j,k);var Yd=function(a){this.da=new I(a);this.Dc=a;this.B=["rtl"==T(a,"direction")];this.ba=[];this.O=[a];this.X=[]};u(Yd,S);Yd.prototype.I=j;Yd.prototype.go=function(){try{for(;;Zd(this));}catch(a){if(a!==x)h(a);else this.dispatchEvent("EndOfDom")}};
-var Zd=function(a){for(var b=a.da.next();a.da.p==1&&!Jd(b);){b=a.da;var c=b.o?-1:1;if(b.p==c){b.p=c*-1;b.V+=b.p*(b.o?-1:1)}b=a.da.next()}a.I=b;if(a.da.p==1){b=a.I;c="rtl"==T(b,"direction");a.ba.push(v(a.ba)||c!=v(a.B)||$d(a,b));a.B.push(c);if(b.nodeName=="IFRAME"||b.nodeName=="FRAME")a.X.push(b);else Id(b)&&a.O.push(b);a.dispatchEvent("StartTag")}else if(a.da.p==-1){a.dispatchEvent("EndTag");a.B.pop();a.ba.pop();a.I==v(a.O)&&a.O.pop()}else a.I.nodeType==3&&a.dispatchEvent("TextNode")};
-Yd.prototype.Xa=function(){return this.X};var $d=function(a,b){if(!b.dir||b==a.Dc)return k;for(var c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==1&&Id(c))return k;return i};var ae=function(a){this.K=Xd;this.m=new Q(this);R(this.m,a,"TextNode",this.Za);sc(this.m,a,"EndOfDom",this.gc)};u(ae,S);ae.prototype.Za=function(a){a=a.target;var b=a.I;if(v(a.B)==this.K.wb&&v(a.O)==this.K.Sb&&v(a.ba)==this.K.ub)this.K.append(b.data,b);else{this.K.Ea()||this.dispatchEvent("DirChunk");this.K=new Vd(b.data,v(a.B),b,v(a.O),v(a.ba))}};ae.prototype.gc=function(){this.K.Ea()||this.dispatchEvent("DirChunk");this.dispatchEvent("EndOfChunks");this.m.ga()};var Z=function(){};aa("bidichecker.FilterFactory",Z,void 0);var $=function(){};Z.ComposableFilter_=$;$.prototype.Ob=function(a){return be(this,a)};$.prototype.and=$.prototype.Ob;$.prototype.tc=function(){return ce(this)};$.prototype.not=$.prototype.tc;$.prototype.xc=function(a){return de(this,a)};$.prototype.or=$.prototype.xc;
-var te=function(a){var b=a.opcode;switch(b){case "AND":return new ee(a);case "AT_TEXT":return new fe(a);case "AT_TEXT_REGEXP":return new ge(a);case "FOLLOWED_BY_TEXT":return new he(a);case "FOLLOWED_BY_TEXT_REGEXP":return new ie(a);case "LOCATION_CLASS":return new je(a);case "LOCATION_CLASS_REGEXP":return new ke(a);case "LOCATION_ID":return new le(a);case "LOCATION_ID_REGEXP":return new me(a);case "NOT":return new ne(a);case "OR":return new oe(a);case "PRECEDED_BY_TEXT":return new pe(a);case "PRECEDED_BY_TEXT_REGEXP":return new qe(a);
-case "SEVERITY":return new re(a);case "TYPE":return new se(a);default:h("Unknown filter opcode: '"+b+"'")}},ue=function(a){if(!a)return j;a=uc(a);return Ba(a,function(b){return te(b)})},be=function(a,b){return new ee({filter1:a,filter2:b})};Z.and=be;Z.atText=function(a){return new fe({atText:a||""})};Z.atTextRegexp=function(a){return new ge({atTextRegexp:a||""})};Z.followedByText=function(a){return new he({followedByText:a||""})};
-Z.followedByTextRegexp=function(a){return new ie({followedByTextRegexp:a||""})};Z.locationClass=function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationClass");return new je({className:a})};Z.locationClassRegexp=function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationClassRegexp");return new ke({classRegexp:a})};Z.locationId=function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationId");return new le({id:a})};
-Z.locationIdRegexp=function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationIdRegexp");return new me({idRegexp:a})};var ce=function(a){return new ne({filter:a})};Z.not=ce;var de=function(a,b){return new oe({filter1:a,filter2:b})};Z.or=de;Z.precededByText=function(a){return new pe({precededByText:a||""})};Z.precededByTextRegexp=function(a){return new qe({precededByTextRegexp:a||""})};Z.severityFrom=function(a){return new re({severityThreshold:a})};Z.type=function(a){return new se({type:a})};
-var ve=function(a,b){if(!(b in a))h("No '"+b+"' parameter found for '"+a.opcode+"' filter")},we=function(a,b,c){ve(a,b);if(typeof a[b]!=c)h("Wrong type for '"+b+"' parameter of '"+a.opcode+"' filter; expected "+c)},xe=function(a,b){we(a,b,"string");return a[b]},ye=function(a,b){ve(a,b);var c=a[b],d;if(typeof c=="string")d=c;else if(c instanceof RegExp)d=c.source;else h("Wrong type for '"+b+"' parameter of '"+a.opcode+"' filter; expected string or RegExp");return RegExp("^("+d+")$")},ze=function(a,
-b){we(a,b,"object");var c=a[b];if(c instanceof $)return c;else if(typeof c.opcode=="string")return te(c);else h("Can't make a filter out of the '"+b+"' parameter of '"+a.opcode+"' filter")},ee=function(a){this.Ta=ze(a,"filter1");this.Ua=ze(a,"filter2")};u(ee,$);ee.prototype.e=function(a,b){return this.Ta.e(a,b)&&this.Ua.e(a,b)};var fe=function(a){this.Qb=xe(a,"atText")};u(fe,$);fe.prototype.e=function(a){return this.Qb==(a.atText||"")};var ge=function(a){this.Pb=ye(a,"atTextRegexp")};u(ge,$);
-ge.prototype.e=function(a){return this.Pb.test(a.atText||"")};var he=function(a){this.cc=xe(a,"followedByText")};u(he,$);he.prototype.e=function(a){return this.cc==(a.followedByText||"")};var ie=function(a){this.bc=ye(a,"followedByTextRegexp")};u(ie,$);ie.prototype.e=function(a){return this.bc.test(a.followedByText||"")};var je=function(a){this.Tb=xe(a,"className")};u(je,$);
-je.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.className)for(var e=d.className.split(/\s/),f=0;f<e.length;++f)if(this.Tb==e[f])return i;return k};var ke=function(a){this.Ub=ye(a,"classRegexp")};u(ke,$);ke.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.className)for(var e=d.className.split(/\s/),f=0;f<e.length;++f)if(this.Ub.test(e[f]))return i;return k};var le=function(a){this.aa=xe(a,"id")};u(le,$);
-le.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.id&&this.aa==d.id)return i;return k};var me=function(a){this.kc=ye(a,"idRegexp")};u(me,$);me.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.id&&this.kc.test(d.id))return i;return k};var ne=function(a){this.Zb=ze(a,"filter")};u(ne,$);ne.prototype.e=function(a,b){return!this.Zb.e(a,b)};var oe=function(a){this.Ta=ze(a,"filter1");this.Ua=ze(a,"filter2")};u(oe,$);
-oe.prototype.e=function(a,b){return this.Ta.e(a,b)||this.Ua.e(a,b)};var pe=function(a){this.Ac=xe(a,"precededByText")};u(pe,$);pe.prototype.e=function(a){return this.Ac==(a.precededByText||"")};var qe=function(a){this.zc=ye(a,"precededByTextRegexp")};u(qe,$);qe.prototype.e=function(a){return this.zc.test(a.precededByText||"")};var re=function(a){we(a,"severityThreshold","number");this.Fc=a.severityThreshold};u(re,$);re.prototype.e=function(a){return this.Fc<=a.severity};
-var se=function(a){this.Ic=xe(a,"type")};u(se,$);se.prototype.e=function(a){return this.Ic==a.type};var Ae=function(){this.X=[]};u(Ae,S);m=Ae.prototype;m.start=function(){this.dispatchEvent("StartFrames")};m.end=function(){this.dispatchEvent("EndFrames")};m.push=function(a){this.X.push(a);this.dispatchEvent("EnterFrame")};m.pop=function(){this.dispatchEvent("ExitFrame");this.X.pop()};m.Xa=function(){return this.X};var Be=function(a,b){this.dc=a;this.$b=b||[];this.A=[]};Be.prototype.Hc=k;Be.prototype.Wa=function(){return this.A};var De=function(a,b,c){var d=a.dc.Xa().slice(0);c&&d.push(c);if(Ca(a.$b,function(e){return!e.e(b,d)})){c=Ce(a,d);if(c!="")b.locationDescription=c;a.A.push(b);if(a.Hc)h(b.toString()+"\n")}},Ce=function(a,b){var c=[];Aa(b,function(d){c.push(Cd(d))});return c.join(" in ")};var Ee=function(a,b){this.sc=!!b;this.na=new Ae;this.nb=new Be(this.na,a)};Ee.prototype.F=j;Ee.prototype.Sa=j;Ee.prototype.Wa=function(){return this.nb.Wa()};
-var Ie=function(a,b,c){var d,e=a.nb;d=[new Fe(e),new Ge(e)];c!=0&&d.unshift(new He(c==-1,e));a.F=new Yd(b);a.Sa=a.sc?new ae(a.F):j;for(b=0;b<d.length;++b)d[b].eb(a);a.F.go();d=a.F.Xa();for(b=0;b<d.length;++b){e=d[b];a.na.push(e);try{var f=(B?e.document||e.contentWindow.document:e.contentDocument||e.contentWindow.document).body;if(e.tagName=="IFRAME")c=0;Ie(a,f,c)}catch(g){}a.na.pop()}};var He=function(a,b){this.Eb=a;this.la=b};He.prototype.eb=function(a){jc(a.F,"StartTag",this)};He.prototype.handleEvent=function(a){a=a.target;if(this.Eb!=v(a.B))De(this.la,new Y("Overall directionality not "+(this.Eb?"RTL":"LTR"),1,new Md(a.I)))};var Ge=function(a){this.la=a;this.ra=[]};m=Ge.prototype;m.J=j;m.eb=function(a){var b=new Q(this);R(b,a.F,"StartTag",this.jc);R(b,a.F,"EndTag",this.hc);R(b,a.F,"TextNode",this.Za);sc(b,a.F,"EndOfDom",b.ga,k,b)};m.jc=function(a){a=a.target;var b=a.I;if(b.dir||b==v(a.O))this.J=j};m.hc=function(a){a=a.target;var b=a.I;if(b==v(a.O))this.J=j;else if(b.dir)if(v(a.B)==a.B[a.B.length-2])this.J=j;else{this.J=b;this.ra=[]}};
-m.Za=function(a){a=a.target;var b=a.I;if(this.J){this.ra.push(b);var c=xd(b.data);if(c){var d=Ba(this.ra,function(f){return f.data}).join(""),e=v(this.ra).parentNode;De(this.la,Je(this,d.substr(0,d.length-(b.data.length-c.text.length)),c.text.length,v(a.B),v(a.ba)),e);this.J=j}else if(td.test(b.data))this.J=j}};var Je=function(a,b,c,d,e){b=new Y("Declared "+(d?"LTR":"RTL")+" spillover to number",e?4:2,new Kd(a.ra,0,c),b);a=Dd(a.J);b.precededByText=a;return b};var Fe=function(a){this.la=a};Fe.prototype.eb=function(a){var b=new Q(this);R(b,a.Sa,"DirChunk",this.fc);sc(b,a.Sa,"EndOfChunks",b.ga,k,b)};Fe.prototype.fc=function(a){var b=this,c=a.target.K;if(c.wb){a=wd(Wd(c));za(a,function(d){(qd.exec(d.text)?i:k)||Ke(b,c,d,"Undeclared LTR text")})}else{a=vd(Wd(c));za(a,function(d){(rd.exec(d.text)?i:k)||Ke(b,c,d,"Undeclared RTL text")})}};
-var Ke=function(a,b,c,d){var e=b.ub?4:3,f=b.Z(c.index,c.text.length);d=new Y(d,e,f,c.text);e=Wd(b);f=c.index;var g=od.exec(e.substr(0,f));f=g?new ud(g[0],f-g[0].length):j;if(f){if(d.severity==3)d.severity=2;d.precededByText=f.text}f=c.index+c.text.length;e=(e=nd.exec(e.substr(f)))?new ud(e[0],f):j;if(e){if(d.severity==3)d.severity=2;d.followedByText=e.text}b=b.Va(c.index).parentNode;De(a.la,d,b)};var Le=function(a){Ee.call(this,a,i)};u(Le,Ee);var Me=function(a,b,c){Od=[];Nd=0;c=new Le(c);b=b||top.document.body;a=a?-1:1;c.na.start();Ie(c,b,a);c.na.end();return c.Wa()};aa("bidichecker.checkPage",Me,void 0);aa("bidichecker.checkPageToJson",function(a,b,c){c=ue(c);a=Me(a,b,c);for(b=0;b<a.length;++b){c=a[b];c.asString=c.toString()}b=[];xc(new vc,a,b);return b.join("")},void 0);
-var Ne=function(a){a=new Pd(a);if(!(a.P||a.A.length==0)){a.D=new W("bidichecker-dialog");var b=a.D;b.Mb="BidiChecker error browser";b.sa&&Fb(b.sa,"BidiChecker error browser");b=a.D;b.oa=k;gd(b);b.n();var c=new X;c.i("prev","< Prev");c.i("next","Next >");b=a.D;b.s=c;if(b.z)if(b.s){c=b.s;c.b=b.z;c.ia()}else b.z.innerHTML="";b=a.D;b.Ra='<div id="bidichecker-dialog-error-text" class="bidichecker-dialog-error-text"> </div><p>Error <input name="current" id="bidichecker-dialog-error-num" type="text" size="3" value="1" /> of <span id="bidichecker-dialog-error-count"></span></p><p style="font-size:75%">Drag this box if it conceals a part of the page you need.</p>';
-if(b.va)b.va.innerHTML='<div id="bidichecker-dialog-error-text" class="bidichecker-dialog-error-text"> </div><p>Error <input name="current" id="bidichecker-dialog-error-num" type="text" size="3" value="1" /> of <span id="bidichecker-dialog-error-count"></span></p><p style="font-size:75%">Drag this box if it conceals a part of the page you need.</p>';hd(a.D,i);a.P=a.D.c();b=H(a.P);var d=j;if(z){d=b.h.createStyleSheet();Nc(d,".bidichecker-dialog-bg { position: absolute; top: 0; left: 0; }.bidichecker-dialog { position: absolute; padding: 5px; background-color: #fcb; border: 1px solid #000; font-family: arial, sans-serif; width: 475px; color: #000; outline: none; direction: ltr }.bidichecker-dialog a, .bidichecker-dialog a:link,.bidichecker-dialog a:visited { color: #0066cc; cursor: pointer; }.bidichecker-dialog-title { position: relative; background-color: #f9efeb; color: #000000; padding: 10px 15px; font-size: 16px; font-weight: bold; vertical-align: middle; cursor: pointer; cursor: hand }.bidichecker-dialog-content { padding: 15px; font-size: 90%; background-color: #fff }.bidichecker-dialog-buttons { padding: 0 15px 15px; background-color: #fff }.bidichecker-dialog-error-text { font-weight: bold; font-size: 125%; color: #f00; height: 80px; overflow: auto; border: 1px dotted #f00 }")}else{c=
-ub(b.h,"head",void 0,void 0)[0];if(!c){d=ub(b.h,"body",void 0,void 0)[0];c=b.k("head");d.parentNode.insertBefore(c,d)}d=b.k("style");Nc(d,".bidichecker-dialog-bg { position: absolute; top: 0; left: 0; }.bidichecker-dialog { position: absolute; padding: 5px; background-color: #fcb; border: 1px solid #000; font-family: arial, sans-serif; width: 475px; color: #000; outline: none; direction: ltr }.bidichecker-dialog a, .bidichecker-dialog a:link,.bidichecker-dialog a:visited { color: #0066cc; cursor: pointer; }.bidichecker-dialog-title { position: relative; background-color: #f9efeb; color: #000000; padding: 10px 15px; font-size: 16px; font-weight: bold; vertical-align: middle; cursor: pointer; cursor: hand }.bidichecker-dialog-content { padding: 15px; font-size: 90%; background-color: #fff }.bidichecker-dialog-buttons { padding: 0 15px 15px; background-color: #fff }.bidichecker-dialog-error-text { font-weight: bold; font-size: 125%; color: #f00; height: 80px; overflow: auto; border: 1px dotted #f00 }");
-b.appendChild(c,d)}a.P.style.zIndex=1E4;b=a.D.n();Fb(b.c("bidichecker-dialog-error-count"),a.A.length+"");a.Q=b.c("bidichecker-dialog-error-num");a.ob=b.c("bidichecker-dialog-error-text");jd(a.D);Rd(a);O(a.D,"dialogselect",a.ec,k,a);a.Q.onchange=ja(a.ic,a)}};aa("bidichecker.runGui",Ne,void 0);aa("bidichecker.runGuiFromJson",function(a){a=uc(a);a=Ba(a,function(b){return new Y(b)});Ne(a)},void 0); })()
+var i=true,j=null,k=false,m,o=this,q=function(a,b,c){a=a.split(".");c=c||o;!(a[0]in c)&&c.execScript&&c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)if(!a.length&&b!==undefined)c[d]=b;else c=c[d]?c[d]:c[d]={}},aa=function(){},ba=function(a){var b=typeof a;if(b=="object")if(a){if(a instanceof Array||!(a instanceof Object)&&Object.prototype.toString.call(a)=="[object Array]"||typeof a.length=="number"&&typeof a.splice!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("splice"))return"array";
+if(!(a instanceof Object)&&(Object.prototype.toString.call(a)=="[object Function]"||typeof a.call!="undefined"&&typeof a.propertyIsEnumerable!="undefined"&&!a.propertyIsEnumerable("call")))return"function"}else return"null";else if(b=="function"&&typeof a.call=="undefined")return"object";return b},s=function(a){return ba(a)=="array"},ca=function(a){var b=ba(a);return b=="array"||b=="object"&&typeof a.length=="number"},t=function(a){return typeof a=="string"},da=function(a){return ba(a)=="function"},
+ea=function(a){a=ba(a);return a=="object"||a=="array"||a=="function"},ha=function(a){return a[fa]||(a[fa]=++ga)},fa="closure_uid_"+Math.floor(Math.random()*2147483648).toString(36),ga=0,ia=function(a,b){var c=b||o;if(arguments.length>2){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(c,e)}}else return function(){return a.apply(c,arguments)}},ja=function(a){var b=Array.prototype.slice.call(arguments,
+1);return function(){var c=Array.prototype.slice.call(arguments);c.unshift.apply(c,b);return a.apply(this,c)}},ka=Date.now||function(){return+new Date},v=function(a,b){function c(){}c.prototype=b.prototype;a.l=b.prototype;a.prototype=new c};var la=function(a){this.stack=Error().stack||"";if(a)this.message=String(a)};v(la,Error);la.prototype.name="CustomError";var ma=function(a){for(var b=1;b<arguments.length;b++){var c=String(arguments[b]).replace(/\$/g,"$$$$");a=a.replace(/\%s/,c)}return a},sa=function(a,b){if(b)return a.replace(na,"&").replace(oa,"<").replace(pa,">").replace(qa,""");else{if(!ra.test(a))return a;if(a.indexOf("&")!=-1)a=a.replace(na,"&");if(a.indexOf("<")!=-1)a=a.replace(oa,"<");if(a.indexOf(">")!=-1)a=a.replace(pa,">");if(a.indexOf('"')!=-1)a=a.replace(qa,""");return a}},na=/&/g,oa=/</g,pa=/>/g,qa=/\"/g,
+ra=/[&<>\"]/,ua=function(a,b){for(var c=0,d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=String(b).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),f=Math.max(d.length,e.length),g=0;c==0&&g<f;g++){var l=d[g]||"",n=e[g]||"",p=RegExp("(\\d*)(\\D*)","g"),G=RegExp("(\\d*)(\\D*)","g");do{var u=p.exec(l)||["","",""],r=G.exec(n)||["","",""];if(u[0].length==0&&r[0].length==0)break;c=ta(u[1].length==0?0:parseInt(u[1],10),r[1].length==0?0:parseInt(r[1],10))||ta(u[2].length==0,r[2].length==0)||
+ta(u[2],r[2])}while(c==0)}return c},ta=function(a,b){if(a<b)return-1;else if(a>b)return 1;return 0};var va=function(a,b){b.unshift(a);la.call(this,ma.apply(j,b));b.shift();this.Nc=a};v(va,la);va.prototype.name="AssertionError";var wa=function(a,b){if(!a){var c=Array.prototype.slice.call(arguments,2),d="Assertion failed";if(b){d+=": "+b;var e=c}h(new va(""+d,e||[]))}return a};var w=function(a){return a[a.length-1]},x=Array.prototype,xa=x.indexOf?function(a,b,c){wa(a.length!=j);return x.indexOf.call(a,b,c)}:function(a,b,c){c=c==j?0:c<0?Math.max(0,a.length+c):c;if(t(a)){if(!t(b)||b.length!=1)return-1;return a.indexOf(b,c)}for(c=c;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},ya=x.forEach?function(a,b,c){wa(a.length!=j);x.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=t(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},za=function(a,b,c){for(var d=
+t(a)?a.split(""):a,e=a.length-1;e>=0;--e)e in d&&b.call(c,d[e],e,a)},Aa=x.map?function(a,b,c){wa(a.length!=j);return x.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=t(a)?a.split(""):a,g=0;g<d;g++)if(g in f)e[g]=b.call(c,f[g],g,a);return e},Ba=x.every?function(a,b,c){wa(a.length!=j);return x.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=t(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return k;return i},Ca=function(a,b){var c=xa(a,b),d;if(d=c>=0){wa(a.length!=
+j);x.splice.call(a,c,1)}return d},Da=function(){return x.concat.apply(x,arguments)},Ea=function(a){if(s(a))return Da(a);else{for(var b=[],c=0,d=a.length;c<d;c++)b[c]=a[c];return b}},Fa=function(a,b,c){wa(a.length!=j);return arguments.length<=2?x.slice.call(a,b):x.slice.call(a,b,c)},Ga=function(a,b,c,d,e){for(var f=0,g=a.length,l;f<g;){var n=f+g>>1,p;p=c?b.call(e,a[n],n,a):b(d,a[n]);if(p>0)f=n+1;else{g=n;l=!p}}return l?f:~f},Ha=function(a,b){return a>b?1:a<b?-1:0};var y="StopIteration"in o?o.StopIteration:Error("StopIteration"),Ia=function(){};Ia.prototype.next=function(){h(y)};Ia.prototype.Ma=function(){return this};
+var Ja=function(a){if(a instanceof Ia)return a;if(typeof a.Ma=="function")return a.Ma(k);if(ca(a)){var b=0,c=new Ia;c.next=function(){for(;;){if(b>=a.length)h(y);if(b in a)return a[b++];else b++}};return c}h(Error("Not implemented"))},Ka=function(a,b,c){if(ca(a))try{ya(a,b,c)}catch(d){if(d!==y)h(d)}else{a=Ja(a);try{for(;;)b.call(c,a.next(),undefined,a)}catch(e){if(e!==y)h(e)}}};var La=function(a,b){this.x=a!==undefined?a:0;this.y=b!==undefined?b:0};La.prototype.toString=function(){return"("+this.x+", "+this.y+")"};var z=function(a,b){this.width=a;this.height=b};z.prototype.toString=function(){return"("+this.width+" x "+this.height+")"};z.prototype.Ea=function(){return!(this.width*this.height)};z.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};z.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Ma=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)},Na=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b},Oa=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b},Pa=function(a,b){var c;if(c=b in a)delete a[b];return c},Qa=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ra=function(a){for(var b,c,d=1;d<arguments.length;d++){c=arguments[d];for(b in c)a[b]=c[b];for(var e=0;e<Qa.length;e++){b=Qa[e];if(Object.prototype.hasOwnProperty.call(c,
+b))a[b]=c[b]}}},Sa=function(){var a=arguments.length;if(a==1&&s(arguments[0]))return Sa.apply(j,arguments[0]);for(var b={},c=0;c<a;c++)b[arguments[c]]=i;return b};var Ta,Ua,Va,Wa,Xa,Ya,Za=function(){return o.navigator?o.navigator.userAgent:j},$a=function(){return o.navigator};Xa=Wa=Va=Ua=Ta=k;var ab;if(ab=Za()){var bb=$a();Ta=ab.indexOf("Opera")==0;Ua=!Ta&&ab.indexOf("MSIE")!=-1;Wa=(Va=!Ta&&ab.indexOf("WebKit")!=-1)&&ab.indexOf("Mobile")!=-1;Xa=!Ta&&!Va&&bb.product=="Gecko"}var cb=Ta,A=Ua,B=Xa,C=Va,db=Wa,eb=$a();Ya=(eb&&eb.platform||"").indexOf("Mac")!=-1;var fb=!!$a()&&($a().appVersion||"").indexOf("X11")!=-1,gb;
+a:{var hb="",ib;if(cb&&o.opera){var jb=o.opera.version;hb=typeof jb=="function"?jb():jb}else{if(B)ib=/rv\:([^\);]+)(\)|;)/;else if(A)ib=/MSIE\s+([^\);]+)(\)|;)/;else if(C)ib=/WebKit\/(\S+)/;if(ib){var kb=ib.exec(Za());hb=kb?kb[1]:""}}if(A){var lb,mb=o.document;lb=mb?mb.documentMode:undefined;if(lb>parseFloat(hb)){gb=String(lb);break a}}gb=hb}var nb=gb,ob={},E=function(a){return ob[a]||(ob[a]=ua(nb,a)>=0)};var pb,qb=!A||E("9");A&&E("9");var rb=function(a){var b;b=(b=a.className)&&typeof b.split=="function"?b.split(/\s+/):[];var c;c=Fa(arguments,1);for(var d=0,e=0;e<c.length;e++)if(!(xa(b,c[e])>=0)){b.push(c[e]);d++}c=d==c.length;a.className=b.join(" ");return c};var I=function(a){return a?new F(H(a)):pb||(pb=new F)},tb=function(a,b,c,d){a=d||a;b=b&&b!="*"?b.toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(!C||sb(document)||E("528"))&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,g;g=a[f];f++)if(b==g.nodeName)d[e++]=g;d.length=e;return d}else return a}a=a.getElementsByTagName(b||"*");if(c){d={};for(f=e=0;g=a[f];f++){b=g.className;if(typeof b.split=="function"&&
+xa(b.split(/\s+/),c)>=0)d[e++]=g}d.length=e;return d}else return a},vb=function(a,b){Ma(b,function(c,d){if(d=="style")a.style.cssText=c;else if(d=="class")a.className=c;else if(d=="for")a.htmlFor=c;else if(d in ub)a.setAttribute(ub[d],c);else a[d]=c})},ub={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",rowspan:"rowSpan",valign:"vAlign",height:"height",width:"width",usemap:"useMap",frameborder:"frameBorder",type:"type"},wb=function(a){var b=a.document;if(C&&!E("500")&&!db){if(typeof a.innerHeight==
+"undefined")a=window;b=a.innerHeight;var c=a.document.documentElement.scrollHeight;if(a==a.top)if(c<b)b-=15;return new z(a.innerWidth,b)}a=sb(b);if(cb&&!E("9.50"))a=k;a=a?b.documentElement:b.body;return new z(a.clientWidth,a.clientHeight)},xb=function(a){return a?a.parentWindow||a.defaultView:window},zb=function(){return yb(document,arguments)},yb=function(a,b){var c=b[0],d=b[1];if(!qb&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',sa(d.name),'"');if(d.type){c.push(' type="',sa(d.type),
+'"');var e={};Ra(e,d);d=e;delete d.type}c.push(">");c=c.join("")}c=a.createElement(c);if(d)if(t(d))c.className=d;else s(d)?rb.apply(j,[c].concat(d)):vb(c,d);b.length>2&&Ab(a,c,b,2);return c},Ab=function(a,b,c,d){function e(g){if(g)b.appendChild(t(g)?a.createTextNode(g):g)}for(d=d;d<c.length;d++){var f=c[d];ca(f)&&!(ea(f)&&f.nodeType>0)?ya(Bb(f)?Ea(f):f,e):e(f)}},sb=function(a){return a.compatMode=="CSS1Compat"},Cb=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):j},Db=function(a,b){var c=
+b.parentNode;c&&c.replaceChild(a,b)},H=function(a){return a.nodeType==9?a:a.ownerDocument||a.document},Eb=function(a,b){if("textContent"in a)a.textContent=b;else if(a.firstChild&&a.firstChild.nodeType==3){for(;a.lastChild!=a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=b}else{for(var c;c=a.firstChild;)a.removeChild(c);a.appendChild(H(a).createTextNode(b))}},Bb=function(a){if(a&&typeof a.length=="number")if(ea(a))return typeof a.item=="function"||typeof a.item=="string";else if(da(a))return typeof a.item==
+"function";return k},F=function(a){this.h=a||o.document||document};F.prototype.n=I;var Fb=function(a){return a.h};F.prototype.c=function(a){return t(a)?this.h.getElementById(a):a};F.prototype.k=function(){return yb(this.h,arguments)};F.prototype.createElement=function(a){return this.h.createElement(a)};F.prototype.createTextNode=function(a){return this.h.createTextNode(a)};var Gb=function(a){a=!C&&sb(a.h)?a.h.documentElement:a.h.body;return new La(a.scrollLeft,a.scrollTop)};
+F.prototype.appendChild=function(a,b){a.appendChild(b)};F.prototype.append=function(a){Ab(H(a),a,arguments,1)};var J=function(a,b,c,d,e){this.o=!!b;a&&Hb(this,a,d);this.V=e!=undefined?e:this.p||0;if(this.o)this.V*=-1;this.Vb=!c};v(J,Ia);J.prototype.r=j;J.prototype.p=0;J.prototype.Ib=k;var Hb=function(a,b,c,d){if(a.r=b)a.p=typeof c=="number"?c:a.r.nodeType!=1?0:a.o?-1:1;if(typeof d=="number")a.V=d};
+J.prototype.next=function(){var a;if(this.Ib){if(!this.r||this.Vb&&this.V==0)h(y);a=this.r;var b=this.o?-1:1;if(this.p==b){var c=this.o?a.lastChild:a.firstChild;c?Hb(this,c):Hb(this,a,b*-1)}else(c=this.o?a.previousSibling:a.nextSibling)?Hb(this,c):Hb(this,a.parentNode,b*-1);this.V+=this.p*(this.o?-1:1)}else this.Ib=i;a=this.r;if(!this.r)h(y);return a};
+J.prototype.splice=function(){var a=this.r,b=this.o?1:-1;if(this.p==b){this.p=b*-1;this.V+=this.p*(this.o?-1:1)}this.o=!this.o;J.prototype.next.call(this);this.o=!this.o;b=ca(arguments[0])?arguments[0]:arguments;for(var c=b.length-1;c>=0;c--)a.parentNode&&a.parentNode.insertBefore(b[c],a.nextSibling);Cb(a)};var Ib,Jb=!A||E("9"),Kb=A&&!E("8");var Lb=function(){};Lb.prototype.kb=k;Lb.prototype.u=function(){if(!this.kb){this.kb=i;this.g()}};Lb.prototype.g=function(){};var K=function(a,b){this.type=a;this.currentTarget=this.target=b};v(K,Lb);m=K.prototype;m.g=function(){delete this.type;delete this.target;delete this.currentTarget};m.U=k;m.qa=i;m.stopPropagation=function(){this.U=i};m.preventDefault=function(){this.qa=k};var Mb=function(a){a.preventDefault()};var L=function(a,b){a&&this.Da(a,b)};v(L,K);var Nb=[1,4,2];m=L.prototype;m.target=j;m.relatedTarget=j;m.offsetX=0;m.offsetY=0;m.clientX=0;m.clientY=0;m.screenX=0;m.screenY=0;m.button=0;m.keyCode=0;m.charCode=0;m.ctrlKey=k;m.altKey=k;m.shiftKey=k;m.metaKey=k;m.yc=k;m.G=j;
+m.Da=function(a,b){var c=this.type=a.type;this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;if(d){if(B)try{d=d.nodeName&&d}catch(e){d=j}}else if(c=="mouseover")d=a.fromElement;else if(c=="mouseout")d=a.toElement;this.relatedTarget=d;this.offsetX=a.offsetX!==undefined?a.offsetX:a.layerX;this.offsetY=a.offsetY!==undefined?a.offsetY:a.layerY;this.clientX=a.clientX!==undefined?a.clientX:a.pageX;this.clientY=a.clientY!==undefined?a.clientY:a.pageY;this.screenX=a.screenX||0;
+this.screenY=a.screenY||0;this.button=a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||(c=="keypress"?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.yc=Ya?a.metaKey:a.ctrlKey;this.state=a.state;this.G=a;delete this.qa;delete this.U};m.stopPropagation=function(){L.l.stopPropagation.call(this);if(this.G.stopPropagation)this.G.stopPropagation();else this.G.cancelBubble=i};
+m.preventDefault=function(){L.l.preventDefault.call(this);var a=this.G;if(a.preventDefault)a.preventDefault();else{a.returnValue=k;if(Kb)try{if(a.ctrlKey||a.keyCode>=112&&a.keyCode<=123)a.keyCode=-1}catch(b){}}};m.g=function(){L.l.g.call(this);this.relatedTarget=this.currentTarget=this.target=this.G=j};var M=function(a,b){this.yb=b;this.R=[];if(a>this.yb)h(Error("[goog.structs.SimplePool] Initial cannot be greater than max"));for(var c=0;c<a;c++)this.R.push(this.C?this.C():{})};v(M,Lb);M.prototype.C=j;M.prototype.jb=j;var Ob=function(a){if(a.R.length)return a.R.pop();return a.C?a.C():{}},Qb=function(a,b){a.R.length<a.yb?a.R.push(b):Pb(a,b)},Pb=function(a,b){if(a.jb)a.jb(b);else if(ea(b))if(da(b.u))b.u();else for(var c in b)delete b[c]};
+M.prototype.g=function(){M.l.g.call(this);for(var a=this.R;a.length;)Pb(this,a.pop());delete this.R};var Rb;var Sb=(Rb="ScriptEngine"in o&&o.ScriptEngine()=="JScript")?o.ScriptEngineMajorVersion()+"."+o.ScriptEngineMinorVersion()+"."+o.ScriptEngineBuildVersion():"0";var Tb=function(){},Ub=0;m=Tb.prototype;m.key=0;m.ha=k;m.Oa=k;m.Da=function(a,b,c,d,e,f){if(da(a))this.vb=i;else if(a&&a.handleEvent&&da(a.handleEvent))this.vb=k;else h(Error("Invalid listener argument"));this.ca=a;this.Db=b;this.src=c;this.type=d;this.capture=!!e;this.Ca=f;this.Oa=k;this.key=++Ub;this.ha=k};m.handleEvent=function(a){if(this.vb)return this.ca.call(this.Ca||this.src,a);return this.ca.handleEvent.call(this.ca,a)};var Vb,Wb,Xb,Yb,Zb,$b,ac,bc,cc,dc,ec;
+(function(){function a(){return{j:0,v:0}}function b(){return[]}function c(){var r=function(D){return g.call(r.src,r.key,D)};return r}function d(){return new Tb}function e(){return new L}var f=Rb&&!(ua(Sb,"5.7")>=0),g;$b=function(r){g=r};if(f){Vb=function(){return Ob(l)};Wb=function(r){Qb(l,r)};Xb=function(){return Ob(n)};Yb=function(r){Qb(n,r)};Zb=function(){return Ob(p)};ac=function(){Qb(p,c())};bc=function(){return Ob(G)};cc=function(r){Qb(G,r)};dc=function(){return Ob(u)};ec=function(r){Qb(u,r)};
+var l=new M(0,600);l.C=a;var n=new M(0,600);n.C=b;var p=new M(0,600);p.C=c;var G=new M(0,600);G.C=d;var u=new M(0,600);u.C=e}else{Vb=a;Wb=aa;Xb=b;Yb=aa;Zb=c;ac=aa;bc=d;cc=aa;dc=e;ec=aa}})();var fc={},N={},O={},gc={},P=function(a,b,c,d,e){if(b)if(s(b)){for(var f=0;f<b.length;f++)P(a,b[f],c,d,e);return j}else{d=!!d;var g=N;b in g||(g[b]=Vb());g=g[b];if(!(d in g)){g[d]=Vb();g.j++}g=g[d];var l=ha(a),n;g.v++;if(g[l]){n=g[l];for(f=0;f<n.length;f++){g=n[f];if(g.ca==c&&g.Ca==e){if(g.ha)break;return n[f].key}}}else{n=g[l]=Xb();g.j++}f=Zb();f.src=a;g=bc();g.Da(c,f,a,b,d,e);c=g.key;f.key=c;n.push(g);fc[c]=g;O[l]||(O[l]=Xb());O[l].push(g);if(a.addEventListener){if(a==o||!a.ib)a.addEventListener(b,
+f,d)}else a.attachEvent(hc(b),f);return c}else h(Error("Invalid event type"))},ic=function(a,b,c,d,e){if(s(b)){for(var f=0;f<b.length;f++)ic(a,b[f],c,d,e);return j}a=P(a,b,c,d,e);fc[a].Oa=i;return a},jc=function(a,b,c,d,e){if(s(b)){for(var f=0;f<b.length;f++)jc(a,b[f],c,d,e);return j}d=!!d;a=kc(a,b,d);if(!a)return k;for(f=0;f<a.length;f++)if(a[f].ca==c&&a[f].capture==d&&a[f].Ca==e)return Q(a[f].key);return k},Q=function(a){if(!fc[a])return k;var b=fc[a];if(b.ha)return k;var c=b.src,d=b.type,e=b.Db,
+f=b.capture;if(c.removeEventListener){if(c==o||!c.ib)c.removeEventListener(d,e,f)}else c.detachEvent&&c.detachEvent(hc(d),e);c=ha(c);e=N[d][f][c];if(O[c]){var g=O[c];Ca(g,b);g.length==0&&delete O[c]}b.ha=i;e.zb=i;lc(d,f,c,e);delete fc[a];return i},lc=function(a,b,c,d){if(!d.Fa)if(d.zb){for(var e=0,f=0;e<d.length;e++)if(d[e].ha){var g=d[e].Db;g.src=j;ac(g);cc(d[e])}else{if(e!=f)d[f]=d[e];f++}d.length=f;d.zb=k;if(f==0){Yb(d);delete N[a][b][c];N[a][b].j--;if(N[a][b].j==0){Wb(N[a][b]);delete N[a][b];
+N[a].j--}if(N[a].j==0){Wb(N[a]);delete N[a]}}}},mc=function(a,b,c){var d=0,e=a==j,f=b==j,g=c==j;c=!!c;if(e)Ma(O,function(n){for(var p=n.length-1;p>=0;p--){var G=n[p];if((f||b==G.type)&&(g||c==G.capture)){Q(G.key);d++}}});else{a=ha(a);if(O[a]){a=O[a];for(e=a.length-1;e>=0;e--){var l=a[e];if((f||b==l.type)&&(g||c==l.capture)){Q(l.key);d++}}}}return d},kc=function(a,b,c){var d=N;if(b in d){d=d[b];if(c in d){d=d[c];a=ha(a);if(d[a])return d[a]}}return j},hc=function(a){if(a in gc)return gc[a];return gc[a]=
+"on"+a},oc=function(a,b,c,d,e){var f=1;b=ha(b);if(a[b]){a.v--;a=a[b];if(a.Fa)a.Fa++;else a.Fa=1;try{for(var g=a.length,l=0;l<g;l++){var n=a[l];if(n&&!n.ha)f&=nc(n,e)!==k}}finally{a.Fa--;lc(c,d,b,a)}}return Boolean(f)},nc=function(a,b){var c=a.handleEvent(b);a.Oa&&Q(a.key);return c};
+$b(function(a,b){if(!fc[a])return i;var c=fc[a],d=c.type,e=N;if(!(d in e))return i;e=e[d];var f,g;if(Ib===undefined)Ib=A&&!o.addEventListener;if(Ib){var l;if(!(l=b))a:{l="window.event".split(".");for(var n=o;f=l.shift();)if(n[f])n=n[f];else{l=j;break a}l=n}f=l;l=i in e;n=k in e;if(l){if(f.keyCode<0||f.returnValue!=undefined)return i;a:{var p=k;if(f.keyCode==0)try{f.keyCode=-1;break a}catch(G){p=i}if(p||f.returnValue==undefined)f.returnValue=i}}p=dc();p.Da(f,this);f=i;try{if(l){for(var u=Xb(),r=p.currentTarget;r;r=
+r.parentNode)u.push(r);g=e[i];g.v=g.j;for(var D=u.length-1;!p.U&&D>=0&&g.v;D--){p.currentTarget=u[D];f&=oc(g,u[D],d,i,p)}if(n){g=e[k];g.v=g.j;for(D=0;!p.U&&D<u.length&&g.v;D++){p.currentTarget=u[D];f&=oc(g,u[D],d,k,p)}}}else f=nc(c,p)}finally{if(u){u.length=0;Yb(u)}p.u();ec(p)}return f}d=new L(b,this);try{f=nc(c,d)}finally{d.u()}return f});var R=function(a){this.$a=a};v(R,Lb);
+var pc=new M(0,100),S=function(a,b,c,d,e,f){if(s(c))for(var g=0;g<c.length;g++)S(a,b,c[g],d,e,f);else qc(a,P(b,c,d||a,e||k,f||a.$a||a));return a},rc=function(a,b,c,d,e,f){if(s(c))for(var g=0;g<c.length;g++)rc(a,b,c[g],d,e,f);else qc(a,ic(b,c,d||a,e||k,f||a.$a||a));return a},qc=function(a,b){if(a.a)a.a[b]=i;else if(a.M){a.a=Ob(pc);a.a[a.M]=i;a.M=j;a.a[b]=i}else a.M=b},sc=function(a,b,c,d,e,f){if(a.M||a.a)if(s(c))for(var g=0;g<c.length;g++)sc(a,b,c[g],d,e,f);else{a:{d=d||a;f=f||a.$a||a;e=!!(e||k);if(b=
+kc(b,c,e))for(c=0;c<b.length;c++)if(b[c].ca==d&&b[c].capture==e&&b[c].Ca==f){b=b[c];break a}b=j}if(b){b=b.key;Q(b);if(a.a)Pa(a.a,b);else if(a.M==b)a.M=j}}return a};R.prototype.ga=function(){if(this.a){for(var a in this.a){Q(a);delete this.a[a]}Qb(pc,this.a);this.a=j}else this.M&&Q(this.M)};R.prototype.g=function(){R.l.g.call(this);this.ga()};R.prototype.handleEvent=function(){h(Error("EventHandler.handleEvent not implemented"))};var T=function(){};v(T,Lb);m=T.prototype;m.ib=i;m.Ha=j;m.db=function(a){this.Ha=a};m.addEventListener=function(a,b,c,d){P(this,a,b,c,d)};m.removeEventListener=function(a,b,c,d){jc(this,a,b,c,d)};
+m.dispatchEvent=function(a){a=a;if(t(a))a=new K(a,this);else if(a instanceof K)a.target=a.target||this;else{var b=a;a=new K(a.type,this);Ra(a,b)}b=1;var c,d=a.type,e=N;if(d in e){e=e[d];d=i in e;var f;if(d){c=[];for(f=this;f;f=f.Ha)c.push(f);f=e[i];f.v=f.j;for(var g=c.length-1;!a.U&&g>=0&&f.v;g--){a.currentTarget=c[g];b&=oc(f,c[g],a.type,i,a)&&a.qa!=k}}if(k in e){f=e[k];f.v=f.j;if(d)for(g=0;!a.U&&g<c.length&&f.v;g++){a.currentTarget=c[g];b&=oc(f,c[g],a.type,k,a)&&a.qa!=k}else for(c=this;!a.U&&c&&
+f.v;c=c.Ha){a.currentTarget=c;b&=oc(f,c,a.type,k,a)&&a.qa!=k}}a=Boolean(b)}else a=i;return a};m.g=function(){T.l.g.call(this);mc(this);this.Ha=j};var tc=function(a){a=String(a);var b;b=/^\s*$/.test(a)?k:/^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g,""));if(b)try{return eval("("+a+")")}catch(c){}h(Error("Invalid JSON string: "+a))},uc=function(){},wc=function(a,b,c){switch(typeof b){case "string":vc(a,b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");
+break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(b==j){c.push("null");break}if(s(b)){var d=b.length;c.push("[");for(var e="",f=0;f<d;f++){c.push(e);wc(a,b[f],c);e=","}c.push("]");break}c.push("{");d="";for(e in b)if(b.hasOwnProperty(e)){f=b[e];if(typeof f!="function"){c.push(d);vc(a,e,c);c.push(":");wc(a,f,c);d=","}}c.push("}");break;case "function":break;default:h(Error("Unknown type: "+typeof b))}},xc={'"':'\\"',"\\":"\\\\","/":"\\/","\u0008":"\\b","\u000c":"\\f",
+"\n":"\\n","\r":"\\r","\t":"\\t","\u000b":"\\u000b"},yc=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g,vc=function(a,b,c){c.push('"',b.replace(yc,function(d){if(d in xc)return xc[d];var e=d.charCodeAt(0),f="\\u";if(e<16)f+="000";else if(e<256)f+="00";else if(e<4096)f+="0";return xc[d]=f+e.toString(16)}),'"')};var zc=function(a){this.w=Rb?[]:"";a!=j&&this.append.apply(this,arguments)};zc.prototype.i=function(a){this.clear();this.append(a)};if(Rb){zc.prototype.Na=0;zc.prototype.append=function(a,b){if(b==j)this.w[this.Na++]=a;else{this.w.push.apply(this.w,arguments);this.Na=this.w.length}return this}}else zc.prototype.append=function(a,b){this.w+=a;if(b!=j)for(var c=1;c<arguments.length;c++)this.w+=arguments[c];return this};zc.prototype.clear=function(){if(Rb)this.Na=this.w.length=0;else this.w=""};
+zc.prototype.toString=function(){if(Rb){var a=this.w.join("");this.clear();a&&this.append(a);return a}else return this.w};var Ac=function(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d};Ac.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"};var Cc=function(a,b,c){a.style[Bc(c)]=b},Dc=function(a,b){var c=H(a);if(c.defaultView&&c.defaultView.getComputedStyle)if(c=c.defaultView.getComputedStyle(a,j))return c[b]||c.getPropertyValue(b);return""},U=function(a,b){return Dc(a,b)||(a.currentStyle?a.currentStyle[b]:j)||a.style[b]},Fc=function(a,b,c){var d,e=B&&(Ya||fb)&&E("1.9");if(b instanceof La){d=b.x;b=b.y}else{d=b;b=c}a.style.left=Ec(d,e);a.style.top=Ec(b,e)},Gc=function(a){if(A)return a.offsetParent;var b=H(a),c=U(a,"position"),d=c=="fixed"||
+c=="absolute";for(a=a.parentNode;a&&a!=b;a=a.parentNode){c=U(a,"position");d=d&&c=="static"&&a!=b.documentElement&&a!=b.body;if(!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||c=="fixed"||c=="absolute"))return a}return j},Hc=function(a){var b,c=H(a),d=U(a,"position"),e=B&&c.getBoxObjectFor&&!a.getBoundingClientRect&&d=="absolute"&&(b=c.getBoxObjectFor(a))&&(b.screenX<0||b.screenY<0),f=new La(0,0),g;b=c?c.nodeType==9?c:H(c):document;if(g=A){g=I(b);g=!sb(g.h)}g=g?b.body:b.documentElement;
+if(a==g)return f;if(a.getBoundingClientRect){d=a.getBoundingClientRect();if(A){a=a.ownerDocument;d.left-=a.documentElement.clientLeft+a.body.clientLeft;d.top-=a.documentElement.clientTop+a.body.clientTop}b=d;c=Gb(I(c));f.x=b.left+c.x;f.y=b.top+c.y}else if(c.getBoxObjectFor&&!e){b=c.getBoxObjectFor(a);c=c.getBoxObjectFor(g);f.x=b.screenX-c.screenX;f.y=b.screenY-c.screenY}else{e=a;do{f.x+=e.offsetLeft;f.y+=e.offsetTop;if(e!=a){f.x+=e.clientLeft||0;f.y+=e.clientTop||0}if(C&&U(e,"position")=="fixed"){f.x+=
+c.body.scrollLeft;f.y+=c.body.scrollTop;break}e=e.offsetParent}while(e&&e!=a);if(cb||C&&d=="absolute")f.y-=c.body.offsetTop;for(e=a;(e=Gc(e))&&e!=c.body&&e!=g;){f.x-=e.scrollLeft;if(!cb||e.tagName!="TR")f.y-=e.scrollTop}}return f},Ic=function(a,b,c){if(b instanceof z){c=b.height;b=b.width}else{if(c==undefined)h(Error("missing height argument"));c=c}a.style.width=Ec(b,i);a.style.height=Ec(c,i)},Ec=function(a,b){if(typeof a=="number")a=(b?Math.round(a):a)+"px";return a},Jc=function(a){var b=cb&&!E("10");
+if(U(a,"display")!="none")return b?new z(a.offsetWidth||a.clientWidth,a.offsetHeight||a.clientHeight):new z(a.offsetWidth,a.offsetHeight);var c=a.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";if(b){b=a.offsetWidth||a.clientWidth;a=a.offsetHeight||a.clientHeight}else{b=a.offsetWidth;a=a.offsetHeight}c.display=d;c.position=f;c.visibility=e;return new z(b,a)},Kc={},Bc=function(a){return Kc[a]||(Kc[a]=String(a).replace(/\-([a-z])/g,function(b,
+c){return c.toUpperCase()}))},Lc=function(a,b){var c=a.style;if("opacity"in c)c.opacity=b;else if("MozOpacity"in c)c.MozOpacity=b;else if("filter"in c)c.filter=b===""?"":"alpha(opacity="+b*100+")"},V=function(a,b){a.style.display=b?"":"none"},Mc=function(a,b){if(A)a.cssText=b;else a[C?"innerText":"innerHTML"]=b};var Nc=function(a){this.b=a;a=A?"focusout":"blur";this.nc=P(this.b,A?"focusin":"focus",this,!A);this.oc=P(this.b,a,this,!A)};v(Nc,T);Nc.prototype.handleEvent=function(a){var b=new L(a.G);b.type=a.type=="focusin"||a.type=="focus"?"focusin":"focusout";try{this.dispatchEvent(b)}finally{b.u()}};Nc.prototype.g=function(){Nc.l.g.call(this);Q(this.nc);Q(this.oc);delete this.b};var Oc=function(a,b,c){this.target=a;this.handle=b||a;this.ab=c||new Ac(NaN,NaN,NaN,NaN);this.h=H(a);this.m=new R(this);P(this.handle,"mousedown",this.Fb,k,this)};v(Oc,T);var Pc=A||B&&E("1.9.3");m=Oc.prototype;m.screenX=0;m.screenY=0;m.Gb=0;m.Hb=0;m.ja=0;m.ka=0;m.mb=i;m.L=k;m.sb=0;m.qc=0;m.lc=k;m.Y=function(){return this.m};m.g=function(){Oc.l.g.call(this);jc(this.handle,"mousedown",this.Fb,k,this);this.m.u();delete this.target;delete this.handle;delete this.m};
+m.Fb=function(a){if(this.mb&&!this.L&&(a.type!="mousedown"||(Jb?a.G.button==0:a.type=="click"?i:!!(a.G.button&Nb[0])))){if(this.sb==0){Qc(this,a);if(this.L)a.preventDefault();else return}else a.preventDefault();var b=this.h,c=b.documentElement,d=!Pc;S(this.m,b,"mousemove",this.rc,d);S(this.m,b,"mouseup",this.ya,d);if(Pc){c.setCapture(k);S(this.m,c,"losecapture",this.ya)}else S(this.m,xb(b),"blur",this.ya);A&&this.lc&&S(this.m,b,"dragstart",Mb);this.Ec&&S(this.m,this.Ec,"scroll",this.vc,d);this.screenX=
+this.Gb=a.screenX;this.screenY=this.Hb=a.screenY;this.ja=this.target.offsetLeft;this.ka=this.target.offsetTop;this.pa=Gb(I(this.h));this.qc=ka()}};var Qc=function(a,b){if(a.dispatchEvent(new Rc("start",a,b.clientX,b.clientY,b))!==k)a.L=i};Oc.prototype.ya=function(a,b){this.m.ga();Pc&&this.h.releaseCapture();if(this.L){this.L=k;this.dispatchEvent(new Rc("end",this,a.clientX,a.clientY,a,Sc(this,this.ja),Tc(this,this.ka),b))}};
+Oc.prototype.rc=function(a){if(this.mb){var b=a.screenX-this.screenX,c=a.screenY-this.screenY;this.screenX=a.screenX;this.screenY=a.screenY;if(!this.L){var d=this.Gb-this.screenX,e=this.Hb-this.screenY;if(d*d+e*e>this.sb){Qc(this,a);if(!this.L){this.ya(a);return}}}c=Uc(this,b,c);b=c.x;c=c.y;if(this.L)if(this.dispatchEvent(new Rc("beforedrag",this,a.clientX,a.clientY,a,b,c))!==k){Vc(this,a,b,c,k);a.preventDefault()}}};
+var Uc=function(a,b,c){var d=Gb(I(a.h));b+=d.x-a.pa.x;c+=d.y-a.pa.y;a.pa=d;a.ja+=b;a.ka+=c;return new La(Sc(a,a.ja),Tc(a,a.ka))};Oc.prototype.vc=function(a){var b=Uc(this,0,0);a.clientX=this.pa.x-this.screenX;a.clientY=this.pa.x-this.screenY;Vc(this,a,b.x,b.y,i)};
+var Vc=function(a,b,c,d){a.target.style.left=c+"px";a.target.style.top=d+"px";a.dispatchEvent(new Rc("drag",a,b.clientX,b.clientY,b,c,d))},Sc=function(a,b){var c=a.ab,d=!isNaN(c.left)?c.left:j;c=!isNaN(c.width)?c.width:0;return Math.min(d!=j?d+c:Infinity,Math.max(d!=j?d:-Infinity,b))},Tc=function(a,b){var c=a.ab,d=!isNaN(c.top)?c.top:j;c=!isNaN(c.height)?c.height:0;return Math.min(d!=j?d+c:Infinity,Math.max(d!=j?d:-Infinity,b))},Rc=function(a,b,c,d,e,f,g,l){K.call(this,a);this.clientX=c;this.clientY=
+d;this.Kc=e;this.left=f!==undefined?f:b.ja;this.top=g!==undefined?g:b.ka;this.Mc=b;this.Lc=!!l};v(Rc,K);var Wc=function(a){if(typeof a.Ba=="function")return a.Ba();if(t(a))return a.split("");if(ca(a)){for(var b=[],c=a.length,d=0;d<c;d++)b.push(a[d]);return b}return Na(a)},Xc=function(a,b,c){if(typeof a.forEach=="function")a.forEach(b,c);else if(ca(a)||t(a))ya(a,b,c);else{var d;if(typeof a.Ya=="function")d=a.Ya();else if(typeof a.Ba!="function")if(ca(a)||t(a)){d=[];for(var e=a.length,f=0;f<e;f++)d.push(f);d=d}else d=Oa(a);else d=void 0;e=Wc(a);f=e.length;for(var g=0;g<f;g++)b.call(c,e[g],d&&d[g],a)}};var Yc=function(a){this.N={};this.a=[];var b=arguments.length;if(b>1){if(b%2)h(Error("Uneven number of arguments"));for(var c=0;c<b;c+=2)this.i(arguments[c],arguments[c+1])}else if(a){if(a instanceof Yc){b=a.Ya();c=a.Ba()}else{b=Oa(a);c=Na(a)}for(var d=0;d<b.length;d++)this.i(b[d],c[d])}};m=Yc.prototype;m.j=0;m.La=0;m.Ba=function(){Zc(this);for(var a=[],b=0;b<this.a.length;b++)a.push(this.N[this.a[b]]);return a};m.Ya=function(){Zc(this);return this.a.concat()};m.Ea=function(){return this.j==0};
+m.clear=function(){this.N={};this.La=this.j=this.a.length=0};var Zc=function(a){if(a.j!=a.a.length){for(var b=0,c=0;b<a.a.length;){var d=a.a[b];if(Object.prototype.hasOwnProperty.call(a.N,d))a.a[c++]=d;b++}a.a.length=c}if(a.j!=a.a.length){var e={};for(c=b=0;b<a.a.length;){d=a.a[b];if(!Object.prototype.hasOwnProperty.call(e,d)){a.a[c++]=d;e[d]=1}b++}a.a.length=c}},$c=function(a,b,c){if(Object.prototype.hasOwnProperty.call(a.N,b))return a.N[b];return c};
+Yc.prototype.i=function(a,b){if(!Object.prototype.hasOwnProperty.call(this.N,a)){this.j++;this.a.push(a);this.La++}this.N[a]=b};Yc.prototype.Ma=function(a){Zc(this);var b=0,c=this.a,d=this.N,e=this.La,f=this,g=new Ia;g.next=function(){for(;;){if(e!=f.La)h(Error("The map has changed since the iterator was created"));if(b>=c.length)h(y);var l=c[b++];return a?l:d[l]}};return g};var ad=o.window;var bd=function(){};(function(a){a.pb=function(){return a.mc||(a.mc=new a)}})(bd);bd.prototype.Ab=0;bd.pb();var W=function(a){this.xa=a||I();this.Bc=cd};v(W,T);W.prototype.tb=bd.pb();var cd=j;m=W.prototype;m.aa=j;m.H=k;m.b=j;m.Bc=j;m.pc=j;m.fa=j;m.ua=j;m.ta=j;m.Jc=k;m.c=function(){return this.b};m.Y=function(){return this.$||(this.$=new R(this))};m.db=function(a){if(this.fa&&this.fa!=a)h(Error("Method not supported"));W.l.db.call(this,a)};m.n=function(){return this.xa};m.k=function(){this.b=this.xa.createElement("div")};
+m.ia=function(a){if(this.H)h(Error("Component already rendered"));this.b||this.k();a?a.insertBefore(this.b,j):this.xa.h.body.appendChild(this.b);if(!this.fa||this.fa.H)this.za()};m.za=function(){this.H=i;dd(this,function(a){!a.H&&a.c()&&a.za()})};m.ma=function(){dd(this,function(a){a.H&&a.ma()});this.$&&this.$.ga();this.H=k};
+m.g=function(){W.l.g.call(this);this.H&&this.ma();if(this.$){this.$.u();delete this.$}dd(this,function(a){a.u()});!this.Jc&&this.b&&Cb(this.b);this.fa=this.pc=this.b=this.ta=this.ua=j};var dd=function(a,b,c){a.ua&&ya(a.ua,b,c)};
+W.prototype.removeChild=function(a,b){if(a){var c=t(a)?a:a.aa||(a.aa=":"+(a.tb.Ab++).toString(36)),d;if(this.ta&&c){d=this.ta;d=c in d?d[c]:void 0;d=d||j}else d=j;a=d;if(c&&a){Pa(this.ta,c);Ca(this.ua,a);if(b){a.ma();a.b&&Cb(a.b)}c=a;if(c==j)h(Error("Unable to set parent component"));c.fa=j;W.l.db.call(c,j)}}if(!a)h(Error("Child is not in parent component"));return a};var X=function(a,b,c){W.call(this,c);this.t=a||"modal-dialog";this.gb=!!b;this.s=ed};v(X,W);m=X.prototype;m.Aa=j;m.Yb=i;m.qb=i;m.gb=k;m.oa=i;m.lb=i;m.Rb=0.5;m.Mb="";m.Ra="";m.s=j;m.W=j;m.hb=k;m.Wb=k;m.f=j;m.d=j;m.Ka=j;m.sa=j;m.Lb=j;m.Ja=j;m.va=j;m.z=j;
+m.k=function(){fd(this);var a=this.n();this.b=a.k("div",{className:this.t,tabIndex:0},this.Ka=a.k("div",{className:this.t+"-title",id:this.aa||(this.aa=":"+(this.tb.Ab++).toString(36))},this.sa=a.k("span",this.t+"-title-text",this.Mb),this.Ja=a.k("span",this.t+"-title-close")),this.va=a.k("div",this.t+"-content"),this.z=a.k("div",this.t+"-buttons"),this.Jb=a.k("span",{tabIndex:0}));this.Lb=this.Ka.id;a=this.c();if(B){a.setAttribute("role","dialog");a.Cc="dialog"}B&&this.c().setAttribute("aria-labelledby",
+this.Lb||"");if(this.Ra)this.va.innerHTML=this.Ra;V(this.Ja,this.qb);V(this.c(),k);if(this.s){a=this.s;a.b=this.z;a.ia()}};var fd=function(a){if(a.gb&&a.oa&&!a.d){var b;b=a.n().k("iframe",{frameborder:0,style:"border:0;vertical-align:bottom;",src:'javascript:""'});a.d=b;a.d.className=a.t+"-bg";V(a.d,k);Lc(a.d,0)}else if((!a.gb||!a.oa)&&a.d){Cb(a.d);a.d=j}if(a.oa&&!a.f){a.f=a.n().k("div",a.t+"-bg");Lc(a.f,a.Rb);V(a.f,k)}else if(!a.oa&&a.f){Cb(a.f);a.f=j}};
+X.prototype.ia=function(a){if(this.H)h(Error("Component already rendered"));this.c()||this.k();a=a||Fb(this.n()).body;this.d&&a.appendChild(this.d);this.f&&a.appendChild(this.f);X.l.ia.call(this,a)};
+X.prototype.za=function(){X.l.za.call(this);this.Aa=new Nc(Fb(this.n()));if(this.lb&&!this.W){var a=new Oc(this.c(),this.Ka);rb(this.Ka,this.t+"-title-draggable");this.W=a}S(S(this.Y(),this.Ja,"click",this.wc),this.Aa,"focusin",this.uc);a=this.c();if(B){a.setAttribute("role","dialog");a.Cc="dialog"}this.sa.id!==""&&B&&this.c().setAttribute("aria-labelledby",this.sa.id)};X.prototype.ma=function(){this.hb&&gd(this,k);this.Aa.u();this.Aa=j;if(this.W){this.W.u();this.W=j}X.l.ma.call(this)};
+var gd=function(a,b){if(b!=a.hb){var c=Fb(a.n()),d=xb(c)||window;a.H||a.ia(c.body);if(b){hd(a);id(a);S(S(S(a.Y(),a.c(),"keydown",a.Ga,i),a.c(),"keypress",a.Ga,i),d,"resize",a.Cb,i)}else sc(sc(sc(a.Y(),a.c(),"keydown",a.Ga,i),a.c(),"keypress",a.Ga,i),d,"resize",a.Cb,i);a.d&&V(a.d,b);a.f&&V(a.f,b);V(a.c(),b);b&&a.focus();if(a.hb=b)S(a.Y(),a.z,"click",a.Bb);else{sc(a.Y(),a.z,"click",a.Bb);a.dispatchEvent("afterhide");a.Wb&&a.u()}}};
+X.prototype.focus=function(){try{this.c().focus()}catch(a){}if(this.s){var b=this.s.wa;if(b)for(var c=Fb(this.n()),d=this.z.getElementsByTagName("button"),e=0,f;f=d[e];e++)if(f.name==b){try{if(C||cb){var g=c.createElement("input");g.style.cssText="position:fixed;width:0;height:0;left:0;top:0;";this.c().appendChild(g);g.focus();this.c().removeChild(g)}f.focus()}catch(l){}break}}};
+var hd=function(a){a.d&&V(a.d,k);a.f&&V(a.f,k);var b=Fb(a.n()),c=wb(xb(b)||window||window),d=Math.max(b.body.scrollWidth,c.width);b=Math.max(b.body.scrollHeight,c.height);if(a.d){V(a.d,i);Ic(a.d,d,b)}if(a.f){V(a.f,i);Ic(a.f,d,b)}if(a.lb){c=Jc(a.c());a.W.ab=new Ac(0,0,d-c.width,b-c.height)}},id=function(a){var b=Fb(a.n()),c=xb(b)||window;if(U(a.c(),"position")=="fixed")var d=b=0;else{d=Gb(a.n());b=d.x;d=d.y}var e=Jc(a.c());c=wb(c||window);Fc(a.c(),Math.max(b+c.width/2-e.width/2,0),Math.max(d+c.height/
+2-e.height/2,0))};m=X.prototype;m.wc=function(){if(this.qb){var a=this.s,b=a&&a.Pa;if(b)this.dispatchEvent(new jd(b,$c(a,b)))&&gd(this,k);else gd(this,k)}};m.g=function(){X.l.g.call(this);if(this.f){Cb(this.f);this.f=j}if(this.d){Cb(this.d);this.d=j}this.Jb=this.z=this.Ja=j};m.Bb=function(a){a:{for(a=a.target;a!=j&&a!=this.z;){if(a.tagName=="BUTTON"){a=a;break a}a=a.parentNode}a=j}if(a&&!a.disabled){a=a.name;this.dispatchEvent(new jd(a,$c(this.s,a)))&&gd(this,k)}};
+m.Ga=function(a){var b=k,c=k,d=this.s,e=a.target;if(a.type=="keydown")if(this.Yb&&a.keyCode==27){var f=d&&d.Pa;e=e.tagName=="SELECT"&&!e.disabled;if(f&&!e){c=i;b=this.dispatchEvent(new jd(f,$c(d,f)))}else e||(b=i)}else{if(a.keyCode==9&&a.shiftKey&&e==this.c())c=i}else if(a.keyCode==13){if(e.tagName=="BUTTON")f=e.name;else if(d){var g=d.wa,l;if(l=g)a:{l=d.b.getElementsByTagName("BUTTON");for(var n=0,p;p=l[n];n++)if(p.name==g||p.id==g){l=p;break a}l=j}l=l;e=(e.tagName=="TEXTAREA"||e.tagName=="SELECT")&&
+!e.disabled;if(l&&!l.disabled&&!e)f=g}if(f){c=i;b=this.dispatchEvent(new jd(f,String($c(d,f))))}}if(b||c){a.stopPropagation();a.preventDefault()}b&&gd(this,k)};m.Cb=function(){hd(this)};m.uc=function(a){if(this.Jb==a.target){a=this.ac;if(da(a)){if(this)a=ia(a,this)}else if(a&&typeof a.handleEvent=="function")a=ia(a.handleEvent,a);else h(Error("Invalid listener argument"));ad.setTimeout(a,0)}};m.ac=function(){A&&Fb(this.n()).body.focus();this.c().focus()};
+var jd=function(a,b){this.type="dialogselect";this.key=a;this.caption=b};v(jd,K);var Y=function(a){this.xa=a||I();Yc.call(this)},ed;v(Y,Yc);m=Y.prototype;m.t="goog-buttonset";m.wa=j;m.b=j;m.Pa=j;m.i=function(a,b,c,d){Yc.prototype.i.call(this,a,b);if(c)this.wa=a;if(d)this.Pa=a;return this};m.ia=function(){if(this.b){this.b.innerHTML="";var a=I(this.b);Xc(this,function(b,c){var d=a.k("button",{name:c},b);if(c==this.wa)d.className=this.t+"-default";this.b.appendChild(d)},this)}};
+(new Y).i("ok","OK",i,i);ed=(new Y).i("ok","OK",i).i("cancel","Cancel",k,i);(new Y).i("yes","Yes",i).i("no","No",k,i);(new Y).i("yes","Yes").i("no","No",i).i("cancel","Cancel",k,i);(new Y).i("continue","Continue").i("save","Save").i("cancel","Cancel",i,i);var kd=RegExp("[\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc](?:[^A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]*[\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc])?","g"),ld=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff](?:[^\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]*[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff])?",
+"g"),md=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff]"),nd=RegExp("[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff][\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*$"),
+od=RegExp("[\u0000-\u001f\u0085\u00a0\u1680\u180e\u2000-\u200f\u2028\u2029\u202f\u205f\u3000]"),pd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\u200e]+$"),qd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\u200f]+$"),
+rd=RegExp("^[\u0000-\u0008\u000e-\u001f!-@[-`{-\u0084\u0086-\u009f\u00a1-\u00bf\u00d7\u00f7\u02b9-\u02ff\u200b-\u200d\u2010-\u2027\u2030-\u205e\u2060-\u2bff\t-\r \u0085\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]*\\d"),sd=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff\u0591-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]"),td=function(a,b){this.text=a;this.index=b},ud=function(a){for(var b=[],c;c=kd.exec(a);)b.push(new td(c[0],
+c.index));return b},vd=function(a){for(var b=[],c;c=ld.exec(a);)b.push(new td(c[0],c.index));return b},wd=function(a){if(a=rd.exec(a))return new td(a[0],0);return j},xd={"\u0008":"\\b","\u000c":"\\f","\n":"\\n","\r":"\\r","\t":"\\t",'"':'\\"',"'":"\\'","\\":"\\\\"},yd=function(a){for(var b=[],c=0;c<a.length;c++){var d=b,e=c,f;f=a.charAt(c);if(f in xd)f=xd[f];else{var g=f;if(od.test(f)){var l=f.charCodeAt(0);g="\\u";if(l<4096){g+="0";if(l<256){g+="0";if(l<16)g+="0"}}g+=l.toString(16)}f=xd[f]=g}d[e]=
+f}return b.join("")},zd=function(a){return a.nodeName+"="+("'"+yd(a.nodeValue)+"'")},Ad=function(a){var b=[];if(a.attributes)for(var c=0;c<a.attributes.length;++c){var d=a.attributes[c];if(d.specified===undefined||d.specified)b.push(d)}a=[a.nodeName.toLowerCase()];b=Aa(b,zd);b.sort();a=a.concat(b);return"<"+a.join(" ")+">"},Bd=function(a){var b=[];for(a=a;a;a=a.parentNode){b.push(Ad(a));if(a.id||a.nodeName=="BODY")break}b.reverse();return b.join("")},Cd=function(a){var b=[],c=new J(a);Ka(c,function(){c.r.nodeType==
+3&&b.push(c.r.data)});return b.join("")},Dd=Sa("ADDRESS","BLOCKQUOTE","BODY","CAPTION","CENTER","COL","COLGROUP","DIR","DIV","DL","DD","DT","FIELDSET","FORM","H1","H2","H3","H4","H5","H6","HR","ISINDEX","OL","LI","MAP","MENU","OPTGROUP","OPTION","P","PRE","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","TL","UL"),Ed=Sa("inline","inline-block","inline-table"),Fd={element:j,style:j},Gd=function(a){if(Fd.element==a)return Fd.style;var b=(a.currentStyle?a.currentStyle.display:j)||Dc(a,"display");Fd={element:a,
+style:b};return b},Hd=function(a){var b=Gd(a);return b?!Ed[b]:!!Dd[a.tagName]},Id=function(a){if(a.nodeType==1){if(a.nodeName=="SCRIPT"||a.nodeName=="STYLE")return k;return Gd(a)!="none"}return i};var Jd=function(a,b,c){this.T=a;this.Gc=b;this.Xb=c;this.S=[]};Jd.prototype.rb=function(){if(this.S.length==0)for(var a=0;a<this.T.length;++a)this.S.push(Kd(this.T[a],a==0?this.Gc:0,a==this.T.length-1?this.Xb:this.T[a].length));else for(a=0;a<this.S.length;++a)Db(this.S[a],this.T[a]);return Hc(this.S[0])};Jd.prototype.Nb=function(){if(this.S.length!=0)for(var a=0;a<this.T.length;++a)Db(this.T[a],this.S[a])};
+var Kd=function(a,b,c){b=b||0;c=c||a.data.length;var d=[];b>0&&d.push(a.data.substring(0,b));d.push(zb("span",{style:"color:red; background-color:yellow"},a.data.substring(b,c)));c<a.data.length&&d.push(a.data.substring(c));b=zb("span",j,d);Db(b,a);return b};var Ld=function(a){this.b=a};Ld.prototype.cb=j;Ld.prototype.rb=function(){this.cb=U(this.b,"backgroundColor");var a=this.b;t("background-color")?Cc(a,"yellow","background-color"):Ma("background-color",ja(Cc,a));return Hc(this.b)};Ld.prototype.Nb=function(){if(this.cb!=j){var a=this.b;t("background-color")?Cc(a,this.cb,"background-color"):Ma("background-color",ja(Cc,a))}};var Z=function(a,b,c,d){if(typeof a=="object"){b=["id","type","severity","atText","locationDescription","precededByText","followedByText"];c=["id","type","severity"];for(d=0;d<b.length;++d){var e=b[d];this[e]=e in a?a[e]:j;if(this[e]==j&&xa(c,e)>=0)h("Required field '"+e+"' not found in bidichecker.Error.")}}else{if(b==undefined)h("Required parameter 'opt_severity' not found in bidichecker.Error.");this.id=Md++;this.type=a;this.severity=b;Nd[this.id]=c||j;this.atText=d||j}};
+Z.prototype.precededByText=j;Z.prototype.followedByText=j;Z.prototype.locationDescription=j;Z.prototype.asString=j;var Md=0,Nd=[];Z.prototype.Z=function(){return Nd[this.id]||j};Z.prototype.toString=function(){var a=new zc("[",this.severity.toString(),"] ",this.type),b;if(b=this.atText)a.append(": ","'"+yd(b)+"'");if(b=this.precededByText)a.append(" preceded by ","'"+yd(b)+"'");if(b=this.followedByText)a.append(" followed by ","'"+yd(b)+"'");if(b=this.locationDescription)a.append(" in ",b);return a.toString()};var Od=function(a){this.A=a;this.q=0;this.ob=this.Q=this.P=j};Od.prototype.ic=function(){var a;if(/[^0-9]/.test(this.Q.value))a=-1;else{a=this.Q.value;var b=Number(a);a=b==0&&/^[\s\xa0]*$/.test(a)?NaN:b;a=a-1}a=a;if(a>=0&&a<this.A.length&&a!=this.q){Pd(this);this.q=a;this.Q.value=this.q+1;Qd(this)}else this.Q.value=this.q+1};Od.prototype.ec=function(a){a=a.key=="next"?this.q==this.A.length-1?0:this.q+1:this.q==0?this.A.length-1:this.q-1;Pd(this);this.q=a;this.Q.value=this.q+1;Qd(this);return k};
+var Qd=function(a){var b=a.A[a.q],c=b.Z();if(c){var d=c.rb();c=window.scrollY;window.scrollTo(0,d.y-100);d=new La(a.P.offsetLeft,a.P.offsetTop);Fc(a.P,d.x,d.y+(window.scrollY-c))}Eb(a.ob,b.toString())},Pd=function(a){(a=a.A[a.q].Z())&&a.Nb()};var Rd=function(a,b){this.Qa=a;this.r=b},Sd=function(a){this.ea=[new Rd(0,a)];this.xb=a};Sd.prototype.append=function(a,b){if(this.xb!=b){this.ea.push(new Rd(a,b));this.xb=b}};var Td=function(a,b){var c=Ga(a.ea,function(d,e){return d-e.Qa}||Ha,k,b);return c>=0?c:-c-2};Sd.prototype.Va=function(a){return this.ea[Td(this,a)].r};Sd.prototype.Z=function(a,b){for(var c=Td(this,a),d=Td(this,a+b-1),e=[],f=c;f<=d;++f)e.push(this.ea[f].r);return new Jd(e,a-this.ea[c].Qa,a+b-this.ea[d].Qa)};
+var Ud=function(a,b,c,d,e){this.wb=b;this.ub=e;this.Sb=d;this.fb=[a];this.Kb=a.length;this.bb=new Sd(c)};Ud.prototype.Ia=j;Ud.prototype.Ea=function(){return Ba(this.fb,function(a){return a.length==0})};Ud.prototype.append=function(a,b){this.bb.append(this.Kb,b);this.Kb+=a.length;this.fb.push(a);this.Ia=j};var Vd=function(a){if(a.Ia===j)a.Ia=a.fb.join("");return a.Ia};Ud.prototype.Va=function(a){return this.bb.Va(a)};Ud.prototype.Z=function(a,b){return this.bb.Z(a,b)};var Wd=new Ud("",k,j,j,k);var Xd=function(a){this.da=new J(a);this.Dc=a;this.B=["rtl"==U(a,"direction")];this.ba=[];this.O=[a];this.X=[]};v(Xd,T);Xd.prototype.I=j;Xd.prototype.go=function(){try{for(;;Yd(this));}catch(a){if(a!==y)h(a);else this.dispatchEvent("EndOfDom")}};
+var Yd=function(a){for(var b=a.da.next();a.da.p==1&&!Id(b);){b=a.da;var c=b.o?-1:1;if(b.p==c){b.p=c*-1;b.V+=b.p*(b.o?-1:1)}b=a.da.next()}a.I=b;if(a.da.p==1){b=a.I;c="rtl"==U(b,"direction");a.ba.push(w(a.ba)||c!=w(a.B)||Zd(a,b));a.B.push(c);if(b.nodeName=="IFRAME"||b.nodeName=="FRAME")a.X.push(b);else Hd(b)&&a.O.push(b);a.dispatchEvent("StartTag")}else if(a.da.p==-1){a.dispatchEvent("EndTag");a.B.pop();a.ba.pop();a.I==w(a.O)&&a.O.pop()}else a.I.nodeType==3&&a.dispatchEvent("TextNode")};
+Xd.prototype.Xa=function(){return this.X};var Zd=function(a,b){if(!b.dir||b==a.Dc)return k;for(var c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==1&&Hd(c))return k;return i};var $d=function(a){this.K=Wd;this.m=new R(this);S(this.m,a,"TextNode",this.Za);rc(this.m,a,"EndOfDom",this.gc)};v($d,T);$d.prototype.Za=function(a){a=a.target;var b=a.I;if(w(a.B)==this.K.wb&&w(a.O)==this.K.Sb&&w(a.ba)==this.K.ub)this.K.append(b.data,b);else{this.K.Ea()||this.dispatchEvent("DirChunk");this.K=new Ud(b.data,w(a.B),b,w(a.O),w(a.ba))}};$d.prototype.gc=function(){this.K.Ea()||this.dispatchEvent("DirChunk");this.dispatchEvent("EndOfChunks");this.m.ga()};var $=function(){};q("bidichecker.FilterFactory.ComposableFilter",$,void 0);$.prototype.Ob=function(a){return ae(this,a)};$.prototype.and=$.prototype.Ob;$.prototype.tc=function(){return be(this)};$.prototype.not=$.prototype.tc;$.prototype.xc=function(a){return ce(this,a)};$.prototype.or=$.prototype.xc;
+var se=function(a){var b=a.opcode;switch(b){case "AND":return new de(a);case "AT_TEXT":return new ee(a);case "AT_TEXT_REGEXP":return new fe(a);case "FOLLOWED_BY_TEXT":return new ge(a);case "FOLLOWED_BY_TEXT_REGEXP":return new he(a);case "LOCATION_CLASS":return new ie(a);case "LOCATION_CLASS_REGEXP":return new je(a);case "LOCATION_ID":return new ke(a);case "LOCATION_ID_REGEXP":return new le(a);case "NOT":return new me(a);case "OR":return new ne(a);case "PRECEDED_BY_TEXT":return new oe(a);case "PRECEDED_BY_TEXT_REGEXP":return new pe(a);
+case "SEVERITY":return new qe(a);case "TYPE":return new re(a);default:h("Unknown filter opcode: '"+b+"'")}},te=function(a){if(!a)return j;a=tc(a);return Aa(a,function(b){return se(b)})},ae=function(a,b){return new de({filter1:a,filter2:b})};q("bidichecker.FilterFactory.and",ae,void 0);q("bidichecker.FilterFactory.atText",function(a){return new ee({atText:a||""})},void 0);q("bidichecker.FilterFactory.atTextRegexp",function(a){return new fe({atTextRegexp:a||""})},void 0);
+q("bidichecker.FilterFactory.followedByText",function(a){return new ge({followedByText:a||""})},void 0);q("bidichecker.FilterFactory.followedByTextRegexp",function(a){return new he({followedByTextRegexp:a||""})},void 0);q("bidichecker.FilterFactory.locationClass",function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationClass");return new ie({className:a})},void 0);
+q("bidichecker.FilterFactory.locationClassRegexp",function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationClassRegexp");return new je({classRegexp:a})},void 0);q("bidichecker.FilterFactory.locationId",function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationId");return new ke({id:a})},void 0);
+q("bidichecker.FilterFactory.locationIdRegexp",function(a){if(!a||a=="")h("Empty or null argument to bidichecker.FilterFactory.locationIdRegexp");return new le({idRegexp:a})},void 0);var be=function(a){return new me({filter:a})};q("bidichecker.FilterFactory.not",be,void 0);var ce=function(a,b){return new ne({filter1:a,filter2:b})};q("bidichecker.FilterFactory.or",ce,void 0);q("bidichecker.FilterFactory.precededByText",function(a){return new oe({precededByText:a||""})},void 0);
+q("bidichecker.FilterFactory.precededByTextRegexp",function(a){return new pe({precededByTextRegexp:a||""})},void 0);q("bidichecker.FilterFactory.severityFrom",function(a){return new qe({severityThreshold:a})},void 0);q("bidichecker.FilterFactory.type",function(a){return new re({type:a})},void 0);
+var ue=function(a,b){if(!(b in a))h("No '"+b+"' parameter found for '"+a.opcode+"' filter")},ve=function(a,b,c){ue(a,b);if(typeof a[b]!=c)h("Wrong type for '"+b+"' parameter of '"+a.opcode+"' filter; expected "+c)},we=function(a,b){ve(a,b,"string");return a[b]},xe=function(a,b){ue(a,b);var c=a[b],d;if(typeof c=="string")d=c;else if(c instanceof RegExp)d=c.source;else h("Wrong type for '"+b+"' parameter of '"+a.opcode+"' filter; expected string or RegExp");return RegExp("^("+d+")$")},ye=function(a,
+b){ve(a,b,"object");var c=a[b];if(c instanceof $)return c;else if(typeof c.opcode=="string")return se(c);else h("Can't make a filter out of the '"+b+"' parameter of '"+a.opcode+"' filter")},de=function(a){this.Ta=ye(a,"filter1");this.Ua=ye(a,"filter2")};v(de,$);de.prototype.e=function(a,b){return this.Ta.e(a,b)&&this.Ua.e(a,b)};var ee=function(a){this.Qb=we(a,"atText")};v(ee,$);ee.prototype.e=function(a){return this.Qb==(a.atText||"")};var fe=function(a){this.Pb=xe(a,"atTextRegexp")};v(fe,$);
+fe.prototype.e=function(a){return this.Pb.test(a.atText||"")};var ge=function(a){this.cc=we(a,"followedByText")};v(ge,$);ge.prototype.e=function(a){return this.cc==(a.followedByText||"")};var he=function(a){this.bc=xe(a,"followedByTextRegexp")};v(he,$);he.prototype.e=function(a){return this.bc.test(a.followedByText||"")};var ie=function(a){this.Tb=we(a,"className")};v(ie,$);
+ie.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.className)for(var e=d.className.split(/\s/),f=0;f<e.length;++f)if(this.Tb==e[f])return i;return k};var je=function(a){this.Ub=xe(a,"classRegexp")};v(je,$);je.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.className)for(var e=d.className.split(/\s/),f=0;f<e.length;++f)if(this.Ub.test(e[f]))return i;return k};var ke=function(a){this.aa=we(a,"id")};v(ke,$);
+ke.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.id&&this.aa==d.id)return i;return k};var le=function(a){this.kc=xe(a,"idRegexp")};v(le,$);le.prototype.e=function(a,b){for(var c=0;c<b.length;++c)for(var d=b[c];d;d=d.parentNode)if(d.id&&this.kc.test(d.id))return i;return k};var me=function(a){this.Zb=ye(a,"filter")};v(me,$);me.prototype.e=function(a,b){return!this.Zb.e(a,b)};var ne=function(a){this.Ta=ye(a,"filter1");this.Ua=ye(a,"filter2")};v(ne,$);
+ne.prototype.e=function(a,b){return this.Ta.e(a,b)||this.Ua.e(a,b)};var oe=function(a){this.Ac=we(a,"precededByText")};v(oe,$);oe.prototype.e=function(a){return this.Ac==(a.precededByText||"")};var pe=function(a){this.zc=xe(a,"precededByTextRegexp")};v(pe,$);pe.prototype.e=function(a){return this.zc.test(a.precededByText||"")};var qe=function(a){ve(a,"severityThreshold","number");this.Fc=a.severityThreshold};v(qe,$);qe.prototype.e=function(a){return this.Fc<=a.severity};
+var re=function(a){this.Ic=we(a,"type")};v(re,$);re.prototype.e=function(a){return this.Ic==a.type};var ze=function(){this.X=[]};v(ze,T);m=ze.prototype;m.start=function(){this.dispatchEvent("StartFrames")};m.end=function(){this.dispatchEvent("EndFrames")};m.push=function(a){this.X.push(a);this.dispatchEvent("EnterFrame")};m.pop=function(){this.dispatchEvent("ExitFrame");this.X.pop()};m.Xa=function(){return this.X};var Ae=function(a,b){this.dc=a;this.$b=b||[];this.A=[]};Ae.prototype.Hc=k;Ae.prototype.Wa=function(){return this.A};var Ce=function(a,b,c){var d=a.dc.Xa().slice(0);c&&d.push(c);if(Ba(a.$b,function(e){return!e.e(b,d)})){c=Be(a,d);if(c!="")b.locationDescription=c;a.A.push(b);if(a.Hc)h(b.toString()+"\n")}},Be=function(a,b){var c=[];za(b,function(d){c.push(Bd(d))});return c.join(" in ")};var De=function(a,b){this.sc=!!b;this.na=new ze;this.nb=new Ae(this.na,a)};De.prototype.F=j;De.prototype.Sa=j;De.prototype.Wa=function(){return this.nb.Wa()};
+var He=function(a,b,c){var d,e=a.nb;d=[new Ee(e),new Fe(e)];c!=0&&d.unshift(new Ge(c==-1,e));a.F=new Xd(b);a.Sa=a.sc?new $d(a.F):j;for(b=0;b<d.length;++b)d[b].eb(a);a.F.go();d=a.F.Xa();for(b=0;b<d.length;++b){e=d[b];a.na.push(e);try{var f=(C?e.document||e.contentWindow.document:e.contentDocument||e.contentWindow.document).body;if(e.tagName=="IFRAME")c=0;He(a,f,c)}catch(g){}a.na.pop()}};var Ge=function(a,b){this.Eb=a;this.la=b};Ge.prototype.eb=function(a){ic(a.F,"StartTag",this)};Ge.prototype.handleEvent=function(a){a=a.target;if(this.Eb!=w(a.B))Ce(this.la,new Z("Overall directionality not "+(this.Eb?"RTL":"LTR"),1,new Ld(a.I)))};var Fe=function(a){this.la=a;this.ra=[]};m=Fe.prototype;m.J=j;m.eb=function(a){var b=new R(this);S(b,a.F,"StartTag",this.jc);S(b,a.F,"EndTag",this.hc);S(b,a.F,"TextNode",this.Za);rc(b,a.F,"EndOfDom",b.ga,k,b)};m.jc=function(a){a=a.target;var b=a.I;if(b.dir||b==w(a.O))this.J=j};m.hc=function(a){a=a.target;var b=a.I;if(b==w(a.O))this.J=j;else if(b.dir)if(w(a.B)==a.B[a.B.length-2])this.J=j;else{this.J=b;this.ra=[]}};
+m.Za=function(a){a=a.target;var b=a.I;if(this.J){this.ra.push(b);var c=wd(b.data);if(c){var d=Aa(this.ra,function(f){return f.data}).join(""),e=w(this.ra).parentNode;Ce(this.la,Ie(this,d.substr(0,d.length-(b.data.length-c.text.length)),c.text.length,w(a.B),w(a.ba)),e);this.J=j}else if(sd.test(b.data))this.J=j}};var Ie=function(a,b,c,d,e){b=new Z("Declared "+(d?"LTR":"RTL")+" spillover to number",e?4:2,new Jd(a.ra,0,c),b);a=Cd(a.J);b.precededByText=a;return b};var Ee=function(a){this.la=a};Ee.prototype.eb=function(a){var b=new R(this);S(b,a.Sa,"DirChunk",this.fc);rc(b,a.Sa,"EndOfChunks",b.ga,k,b)};Ee.prototype.fc=function(a){var b=this,c=a.target.K;if(c.wb){a=vd(Vd(c));ya(a,function(d){(pd.exec(d.text)?i:k)||Je(b,c,d,"Undeclared LTR text")})}else{a=ud(Vd(c));ya(a,function(d){(qd.exec(d.text)?i:k)||Je(b,c,d,"Undeclared RTL text")})}};
+var Je=function(a,b,c,d){var e=b.ub?4:3,f=b.Z(c.index,c.text.length);d=new Z(d,e,f,c.text);e=Vd(b);f=c.index;var g=nd.exec(e.substr(0,f));f=g?new td(g[0],f-g[0].length):j;if(f){if(d.severity==3)d.severity=2;d.precededByText=f.text}f=c.index+c.text.length;e=(e=md.exec(e.substr(f)))?new td(e[0],f):j;if(e){if(d.severity==3)d.severity=2;d.followedByText=e.text}b=b.Va(c.index).parentNode;Ce(a.la,d,b)};var Ke=function(a){De.call(this,a,i)};v(Ke,De);var Le=function(a,b,c){Nd=[];Md=0;c=new Ke(c);b=b||top.document.body;a=a?-1:1;c.na.start();He(c,b,a);c.na.end();return c.Wa()};q("bidichecker.checkPage",Le,void 0);q("bidichecker.checkPageToJson",function(a,b,c){c=te(c);a=Le(a,b,c);for(b=0;b<a.length;++b){c=a[b];c.asString=c.toString()}b=[];wc(new uc,a,b);return b.join("")},void 0);
+var Me=function(a){a=new Od(a);if(!(a.P||a.A.length==0)){a.D=new X("bidichecker-dialog");var b=a.D;b.Mb="BidiChecker error browser";b.sa&&Eb(b.sa,"BidiChecker error browser");b=a.D;b.oa=k;fd(b);b.n();var c=new Y;c.i("prev","< Prev");c.i("next","Next >");b=a.D;b.s=c;if(b.z)if(b.s){c=b.s;c.b=b.z;c.ia()}else b.z.innerHTML="";b=a.D;b.Ra='<div id="bidichecker-dialog-error-text" class="bidichecker-dialog-error-text"> </div><p>Error <input name="current" id="bidichecker-dialog-error-num" type="text" size="3" value="1" /> of <span id="bidichecker-dialog-error-count"></span></p><p style="font-size:75%">Drag this box if it conceals a part of the page you need.</p>';
+if(b.va)b.va.innerHTML='<div id="bidichecker-dialog-error-text" class="bidichecker-dialog-error-text"> </div><p>Error <input name="current" id="bidichecker-dialog-error-num" type="text" size="3" value="1" /> of <span id="bidichecker-dialog-error-count"></span></p><p style="font-size:75%">Drag this box if it conceals a part of the page you need.</p>';gd(a.D,i);a.P=a.D.c();b=I(a.P);var d=j;if(A){d=b.h.createStyleSheet();Mc(d,".bidichecker-dialog-bg { position: absolute; top: 0; left: 0; }.bidichecker-dialog { position: absolute; padding: 5px; background-color: #fcb; border: 1px solid #000; font-family: arial, sans-serif; width: 475px; color: #000; outline: none; direction: ltr }.bidichecker-dialog a, .bidichecker-dialog a:link,.bidichecker-dialog a:visited { color: #0066cc; cursor: pointer; }.bidichecker-dialog-title { position: relative; background-color: #f9efeb; color: #000000; padding: 10px 15px; font-size: 16px; font-weight: bold; vertical-align: middle; cursor: pointer; cursor: hand }.bidichecker-dialog-content { padding: 15px; font-size: 90%; background-color: #fff }.bidichecker-dialog-buttons { padding: 0 15px 15px; background-color: #fff }.bidichecker-dialog-error-text { font-weight: bold; font-size: 125%; color: #f00; height: 80px; overflow: auto; border: 1px dotted #f00 }")}else{c=
+tb(b.h,"head",void 0,void 0)[0];if(!c){d=tb(b.h,"body",void 0,void 0)[0];c=b.k("head");d.parentNode.insertBefore(c,d)}d=b.k("style");Mc(d,".bidichecker-dialog-bg { position: absolute; top: 0; left: 0; }.bidichecker-dialog { position: absolute; padding: 5px; background-color: #fcb; border: 1px solid #000; font-family: arial, sans-serif; width: 475px; color: #000; outline: none; direction: ltr }.bidichecker-dialog a, .bidichecker-dialog a:link,.bidichecker-dialog a:visited { color: #0066cc; cursor: pointer; }.bidichecker-dialog-title { position: relative; background-color: #f9efeb; color: #000000; padding: 10px 15px; font-size: 16px; font-weight: bold; vertical-align: middle; cursor: pointer; cursor: hand }.bidichecker-dialog-content { padding: 15px; font-size: 90%; background-color: #fff }.bidichecker-dialog-buttons { padding: 0 15px 15px; background-color: #fff }.bidichecker-dialog-error-text { font-weight: bold; font-size: 125%; color: #f00; height: 80px; overflow: auto; border: 1px dotted #f00 }");
+b.appendChild(c,d)}a.P.style.zIndex=1E4;b=a.D.n();Eb(b.c("bidichecker-dialog-error-count"),a.A.length+"");a.Q=b.c("bidichecker-dialog-error-num");a.ob=b.c("bidichecker-dialog-error-text");id(a.D);Qd(a);P(a.D,"dialogselect",a.ec,k,a);a.Q.onchange=ia(a.ic,a)}};q("bidichecker.runGui",Me,void 0);q("bidichecker.runGuiFromJson",function(a){a=tc(a);a=Aa(a,function(b){return new Z(b)});Me(a)},void 0); })()
diff --git a/src/errorcollector_test.html b/src/errorcollector_test.html
index 6be9991..b4ec310 100644
--- a/src/errorcollector_test.html
+++ b/src/errorcollector_test.html
@@ -71,7 +71,7 @@
function testErrorCollector_AddErrorSuppressedByFilter() {
- var filters = [bidichecker.FilterFactory.constructFilter(
+ var filters = [bidichecker.FilterFactory.constructFilter_(
{'atText': 'friends', 'opcode': 'AT_TEXT'})];
var collector =
@@ -83,7 +83,7 @@
function testErrorCollector_AddErrorNotSuppressedByFilter() {
- var filters = [bidichecker.FilterFactory.constructFilter(
+ var filters = [bidichecker.FilterFactory.constructFilter_(
{'atText': 'friends', 'opcode': 'AT_TEXT'})];
var collector =
@@ -96,9 +96,9 @@
function testErrorCollector_AddErrorSuppressedBySecondFilter() {
// Make sure all filters are applied to all errors.
- var filters = [bidichecker.FilterFactory.constructFilter(
+ var filters = [bidichecker.FilterFactory.constructFilter_(
{'atText': 'friends', 'opcode': 'AT_TEXT'}),
- bidichecker.FilterFactory.constructFilter(
+ bidichecker.FilterFactory.constructFilter_(
{'atText': 'enemies', 'opcode': 'AT_TEXT'})];
var collector =
diff --git a/src/filterfactory.js b/src/filterfactory.js
index 7295bd9..fd3fbd9 100644
--- a/src/filterfactory.js
+++ b/src/filterfactory.js
@@ -13,60 +13,54 @@
// limitations under the License.
/**
- * @fileoverview Factory for constructing filters from deserialized objects.
+ * @fileoverview Factory methods for constructing error-suppression filters.
+ */
+
+/**
* In this file, filters (whether their static factory methods or their class
* definitions) are ordered alphabetically.
*/
goog.provide('bidichecker.FilterFactory');
+goog.provide('bidichecker.FilterFactory.ComposableFilter');
goog.require('bidichecker.Filter');
goog.require('goog.json');
/**
- * Factory class that constructs error-suppression filters from bare objects
- * deserialized from JSON.
- * @constructor
- * @export
- */
-bidichecker.FilterFactory = function() {};
-
-
-/**
- * Abstract base class for custom filter classes, providing them with {@code
- * and()}, {@code or()} and {@code not()} methods.
+ * Abstract base class for custom filter classes, providing them with
+ * {@code and()}, {@code or()} and {@code not()} methods.
* @constructor
* @implements {bidichecker.Filter}
- * @private
* @export
*/
-bidichecker.FilterFactory.ComposableFilter_ = function() {};
+bidichecker.FilterFactory.ComposableFilter = function() {};
/** @inheritDoc */
-bidichecker.FilterFactory.ComposableFilter_.prototype.isSuppressed =
+bidichecker.FilterFactory.ComposableFilter.prototype.isSuppressed =
goog.abstractMethod;
/**
* Create a filter which ands this filter with another.
* @param {!bidichecker.Filter} other The second subfilter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
-bidichecker.FilterFactory.ComposableFilter_.prototype.and = function(other) {
+bidichecker.FilterFactory.ComposableFilter.prototype.and = function(other) {
return bidichecker.FilterFactory.and(this, other);
};
/**
* Create a filter which inverts this filter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
-bidichecker.FilterFactory.ComposableFilter_.prototype.not = function() {
+bidichecker.FilterFactory.ComposableFilter.prototype.not = function() {
return bidichecker.FilterFactory.not(this);
};
@@ -74,10 +68,10 @@
/**
* Create a filter which ors this filter with another.
* @param {!bidichecker.Filter} other The second subfilter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
-bidichecker.FilterFactory.ComposableFilter_.prototype.or = function(other) {
+bidichecker.FilterFactory.ComposableFilter.prototype.or = function(other) {
return bidichecker.FilterFactory.or(this, other);
};
@@ -89,9 +83,10 @@
* @param {!Object} bareFilter The object representing the filter. Must contain
* an {@code 'opcode'} field with a string indicating the filter type.
* Other supported field names and types are dependent on the filter type.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} The new filter.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} The new filter.
+ * @private
*/
-bidichecker.FilterFactory.constructFilter = function(bareFilter) {
+bidichecker.FilterFactory.constructFilter_ = function(bareFilter) {
var opcode = bareFilter['opcode'];
switch (opcode) {
case 'AND':
@@ -163,7 +158,7 @@
var bareFilters =
(/** @type {Array.<!Object>} */ goog.json.parse(opt_filtersJson));
return goog.array.map(bareFilters, function(bareFilter) {
- return bidichecker.FilterFactory.constructFilter(bareFilter);
+ return bidichecker.FilterFactory.constructFilter_(bareFilter);
});
};
@@ -172,7 +167,7 @@
* Create a filter which suppresses errors by and-ing component filters.
* @param {!bidichecker.Filter} filter1 The first subfilter.
* @param {!bidichecker.Filter} filter2 The second subfilter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.and = function(filter1, filter2) {
@@ -186,7 +181,7 @@
* {@code atText} fields.
* @param {?string} atText A string which must match the entire {@code atText}
* field. If empty or null, will only match an empty or null {@code atText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.atText = function(atText) {
@@ -200,7 +195,7 @@
* @param {string|RegExp} atTextRegexp A regular expression, which must match
* the entire {@code atText} field. If empty or null, will only match an
* empty or null {@code atText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.atTextRegexp = function(atTextRegexp) {
@@ -212,10 +207,10 @@
/**
* Create a filter which suppresses errors based on a literal match of their
* {@code followedByText} fields.
- * @param {?string} followedByText A string which must match the entire {@code
- * followedByText} field. If empty or null, will only match an empty or null
- * {@code followedByText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @param {?string} followedByText A string which must match the entire
+ * {@code followedByText} field. If empty or null, will only match an empty
+ * or null {@code followedByText}.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.followedByText = function(followedByText) {
@@ -230,7 +225,7 @@
* @param {string|RegExp} followedByTextRegexp A regular expression, which must
* match the entire {@code followedByText} field. If empty or null, will
* only match an empty or null {@code followedByText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.followedByTextRegexp = function(
@@ -246,7 +241,7 @@
* @param {string} className A string which must match one of the class names in
* the {@code class} attribute of the location or one of its ancestors. Must
* not be empty or null.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.locationClass = function(className) {
@@ -265,7 +260,7 @@
* @param {string|RegExp} classRegexp A regular expression, which must match
* one of the class names in the {@code class} attribute of the location or
* one of its ancestors. Must not be empty or null.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.locationClassRegexp = function(classRegexp) {
@@ -283,7 +278,7 @@
* location's (or one of its DOM ancestors') {@code id} attribute.
* @param {string} id A string which must match the entire {@code id} attribute
* of the location or one of its ancestors. Must not be empty or null.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.locationId = function(id) {
@@ -300,7 +295,7 @@
* @param {string|RegExp} idRegexp A regular expression, which must match the
* entire {@code id} attribute of the location or one of its ancestors. Must
* not be empty or null.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.locationIdRegexp = function(idRegexp) {
@@ -316,7 +311,7 @@
/**
* Create a filter which suppresses errors by inverting another filter.
* @param {!bidichecker.Filter} filter The subfilter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.not = function(filter) {
@@ -328,7 +323,7 @@
* Create a filter which suppresses errors by or-ing component filters.
* @param {!bidichecker.Filter} filter1 The first subfilter.
* @param {!bidichecker.Filter} filter2 The second subfilter.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.or = function(filter1, filter2) {
@@ -340,10 +335,10 @@
/**
* Create a filter which suppresses errors based on a literal match of their
* {@code precededByText} fields.
- * @param {?string} precededByText A string which must match the entire {@code
- * precededByText} field. If empty or null, will only match an empty or null
- * {@code precededByText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @param {?string} precededByText A string which must match the entire
+ * {@code precededByText} field. If empty or null, will only match an empty
+ * or null {@code precededByText}.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.precededByText = function(precededByText) {
@@ -358,7 +353,7 @@
* @param {string|RegExp} precededByTextRegexp A regular expression, which must
* match the entire {@code precededByText} field. If empty or null, will
* only match an empty or null {@code precededByText}.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.precededByTextRegexp = function(
@@ -373,7 +368,7 @@
* @param {number} severityThreshold the severity level from which errors should
* be suppressed. At level 1, all messages will be filtered out. Note that
* higher values indicate lower severities.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.severityFrom = function(severityThreshold) {
@@ -385,7 +380,7 @@
/**
* Create a filter which suppresses errors based on their type fields.
* @param {string} type The error type name to be matched exactly.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter object.
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter object.
* @export
*/
bidichecker.FilterFactory.type = function(type) {
@@ -481,7 +476,7 @@
* filter, or an object supporting an {@code isSuppressed()} method.
* @param {!Object} bareObject The object representing the filter.
* @param {string} field The name of the field.
- * @return {!bidichecker.FilterFactory.ComposableFilter_} A filter constructed
+ * @return {!bidichecker.FilterFactory.ComposableFilter} A filter constructed
* from the field's contents.
* @private
*/
@@ -491,12 +486,12 @@
// Recursively build any subfilters referred to by this one.
var subfilterObject = bareObject[field];
- if (subfilterObject instanceof bidichecker.FilterFactory.ComposableFilter_) {
+ if (subfilterObject instanceof bidichecker.FilterFactory.ComposableFilter) {
// Found a constructed filter object.
return subfilterObject;
} else if (typeof subfilterObject['opcode'] == 'string') {
// Found a raw filter object.
- return bidichecker.FilterFactory.constructFilter(subfilterObject);
+ return bidichecker.FilterFactory.constructFilter_(subfilterObject);
} else {
throw 'Can\'t make a filter out of the \'' + field + '\' parameter of \'' +
bareObject['opcode'] + '\' filter';
@@ -509,7 +504,7 @@
* @param {!Object} bareObject An object containing 'filter1' and 'filter2'
* fields, each containing a bare object representing a component filter.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.AndFilter_ = function(bareObject) {
@@ -528,7 +523,7 @@
bidichecker.FilterFactory.getFilterParam_(bareObject, 'filter2');
};
goog.inherits(bidichecker.FilterFactory.AndFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -546,7 +541,7 @@
* must match the entire {@code atText} field value. If empty, will only
* match an empty or null {@code atText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.AtTextFilter_ = function(bareObject) {
@@ -558,7 +553,7 @@
bidichecker.FilterFactory.getStringParam_(bareObject, 'atText');
};
goog.inherits(bidichecker.FilterFactory.AtTextFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -572,11 +567,11 @@
* A filter which suppresses errors by applying a regular expression to their
* {@code atText} fields.
* @param {!Object} bareObject An object containing an 'atTextRegexp' field
- * containing a regular expression, which must match the entire {@code
- * atText} field value. If empty, will only match an empty or null {@code
- * atText}.
+ * containing a regular expression, which must match the entire
+ * {@code atText} field value. If empty, will only match an empty or null
+ * {@code atText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.AtTextRegexpFilter_ = function(bareObject) {
@@ -588,7 +583,7 @@
bidichecker.FilterFactory.getRegexpParam_(bareObject, 'atTextRegexp');
};
goog.inherits(bidichecker.FilterFactory.AtTextRegexpFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -605,7 +600,7 @@
* which must match the entire {@code followedByText} field value. If empty,
* will only match an empty or null {@code followedByText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.FollowedByTextFilter_ = function(bareObject) {
@@ -617,7 +612,7 @@
bidichecker.FilterFactory.getStringParam_(bareObject, 'followedByText');
};
goog.inherits(bidichecker.FilterFactory.FollowedByTextFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -631,11 +626,11 @@
* A filter which suppresses errors by applying a regular expression to their
* {@code followedByText} fields.
* @param {!Object} bareObject An object containing a 'followedByTextRegexp'
- * field containing a regular expression, which must match the entire {@code
- * followedByText} field value. If empty, will only match an empty or null
- * {@code followedByText}.
+ * field containing a regular expression, which must match the entire
+ * {@code followedByText} field value. If empty, will only match an empty or
+ * null {@code followedByText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.FollowedByTextRegexpFilter_ = function(bareObject) {
@@ -648,7 +643,7 @@
'followedByTextRegexp');
};
goog.inherits(bidichecker.FilterFactory.FollowedByTextRegexpFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -665,7 +660,7 @@
* must match one of the class names in the {@code class} attribute of the
* location or one of its ancestors.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.LocationClassFilter_ = function(bareObject) {
@@ -677,7 +672,7 @@
bidichecker.FilterFactory.getStringParam_(bareObject, 'className');
};
goog.inherits(bidichecker.FilterFactory.LocationClassFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -708,7 +703,7 @@
* containing a regular expression which must match one of the class names
* in the {@code class} attribute of the location or one of its ancestors.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.LocationClassRegexpFilter_ = function(bareObject) {
@@ -720,7 +715,7 @@
bidichecker.FilterFactory.getRegexpParam_(bareObject, 'classRegexp');
};
goog.inherits(bidichecker.FilterFactory.LocationClassRegexpFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -750,7 +745,7 @@
* @param {!Object} bareObject An object containing an 'id' field, which must
* match the {@code id} attribute of the location or one of its ancestors.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.LocationIdFilter_ = function(bareObject) {
@@ -761,7 +756,7 @@
this.id_ = bidichecker.FilterFactory.getStringParam_(bareObject, 'id');
};
goog.inherits(bidichecker.FilterFactory.LocationIdFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -786,7 +781,7 @@
* containing a regular expression, which must match the {@code id}
* attribute of the location or one of its ancestors.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.LocationIdRegexpFilter_ = function(bareObject) {
@@ -798,7 +793,7 @@
bidichecker.FilterFactory.getRegexpParam_(bareObject, 'idRegexp');
};
goog.inherits(bidichecker.FilterFactory.LocationIdRegexpFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -821,7 +816,7 @@
* @param {!Object} bareObject An object containing a 'filter' field, containing
* a bare object representing a component filter.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.NotFilter_ = function(bareObject) {
@@ -833,7 +828,7 @@
bidichecker.FilterFactory.getFilterParam_(bareObject, 'filter');
};
goog.inherits(bidichecker.FilterFactory.NotFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -848,7 +843,7 @@
* @param {!Object} bareObject An object containing 'filter1' and 'filter2'
* fields, each containing a bare object representing a component filter.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.OrFilter_ = function(bareObject) {
@@ -867,7 +862,7 @@
bidichecker.FilterFactory.getFilterParam_(bareObject, 'filter2');
};
goog.inherits(bidichecker.FilterFactory.OrFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -879,13 +874,13 @@
/**
- * A filter which suppresses errors by a literal match of their {@code
- * precededByText} fields.
+ * A filter which suppresses errors by a literal match of their
+ * {@code precededByText} fields.
* @param {!Object} bareObject An object containing a 'precededByText' field,
* which must match the entire {@code precededByText} field value. If empty,
* will only match an empty or null {@code precededByText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.PrecededByTextFilter_ = function(bareObject) {
@@ -897,7 +892,7 @@
bidichecker.FilterFactory.getStringParam_(bareObject, 'precededByText');
};
goog.inherits(bidichecker.FilterFactory.PrecededByTextFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -915,7 +910,7 @@
* precededByText field value. If empty, will only match an empty or null
* {@code precededByText}.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.PrecededByTextRegexpFilter_ = function(bareObject) {
@@ -928,7 +923,7 @@
'precededByTextRegexp');
};
goog.inherits(bidichecker.FilterFactory.PrecededByTextRegexpFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -944,7 +939,7 @@
* 'severityThreshold' field representing the threshold severity value for
* suppression.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.SeverityFilter_ = function(bareObject) {
@@ -956,7 +951,7 @@
bareObject, 'severityThreshold');
};
goog.inherits(bidichecker.FilterFactory.SeverityFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
@@ -971,7 +966,7 @@
* @param {!Object} bareObject An object containing a string-valued 'type' field
* which must exactly match the error type value.
* @constructor
- * @extends {bidichecker.FilterFactory.ComposableFilter_}
+ * @extends {bidichecker.FilterFactory.ComposableFilter}
* @private
*/
bidichecker.FilterFactory.TypeFilter_ = function(bareObject) {
@@ -982,7 +977,7 @@
this.type_ = bidichecker.FilterFactory.getStringParam_(bareObject, 'type');
};
goog.inherits(bidichecker.FilterFactory.TypeFilter_,
- bidichecker.FilterFactory.ComposableFilter_);
+ bidichecker.FilterFactory.ComposableFilter);
/** @inheritDoc */
diff --git a/src/filterfactory_test.html b/src/filterfactory_test.html
index 659cc6b..76f98dc 100644
--- a/src/filterfactory_test.html
+++ b/src/filterfactory_test.html
@@ -33,7 +33,7 @@
<script type="text/javascript">
function testFilterFactory_AndFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'filter1': new bidichecker.FilterFactory.atText('friends'),
'filter2': new bidichecker.FilterFactory.locationId('friends'),
'opcode': 'AND'});
@@ -91,7 +91,7 @@
function testFilterFactory_AtTextFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'atText': 'friends', 'opcode': 'AT_TEXT'});
var expected = bidichecker.FilterFactory.atText('friends');
assertObjectEquals(expected, actual);
@@ -151,7 +151,7 @@
function testFilterFactory_AtTextRegexpFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'atTextRegexp': 'friends', 'opcode': 'AT_TEXT_REGEXP'});
var expected = bidichecker.FilterFactory.atTextRegexp('friends');
assertObjectEquals(expected, actual);
@@ -225,7 +225,7 @@
function testFilterFactory_FollowedByTextFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'followedByText': 'friends', 'opcode': 'FOLLOWED_BY_TEXT'});
var expected = bidichecker.FilterFactory.followedByText('friends');
assertObjectEquals(expected, actual);
@@ -289,7 +289,7 @@
function testFilterFactory_FollowedByTextRegexpFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'followedByTextRegexp': 'friends',
'opcode': 'FOLLOWED_BY_TEXT_REGEXP'});
var expected = bidichecker.FilterFactory.followedByTextRegexp('friends');
@@ -368,7 +368,7 @@
function testFilterFactory_LocationClassFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'className': 'friends', 'opcode': 'LOCATION_CLASS'});
var expected = bidichecker.FilterFactory.locationClass('friends');
assertObjectEquals(expected, actual);
@@ -433,7 +433,7 @@
function testFilterFactory_LocationClassRegexpFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'classRegexp': 'friends', 'opcode': 'LOCATION_CLASS_REGEXP'});
var expected = bidichecker.FilterFactory.locationClassRegexp('friends');
assertObjectEquals(expected, actual);
@@ -498,7 +498,7 @@
function testFilterFactory_LocationIdFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'id': 'friends', 'opcode': 'LOCATION_ID'});
var expected = bidichecker.FilterFactory.locationId('friends');
assertObjectEquals(expected, actual);
@@ -563,7 +563,7 @@
function testFilterFactory_LocationIdRegexpFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'idRegexp': 'friends', 'opcode': 'LOCATION_ID_REGEXP'});
var expected = bidichecker.FilterFactory.locationIdRegexp('friends');
assertObjectEquals(expected, actual);
@@ -627,7 +627,7 @@
function testFilterFactory_NotFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'filter': new bidichecker.FilterFactory.atText('friends'),
'opcode': 'NOT'});
var expected = bidichecker.FilterFactory.not(
@@ -661,7 +661,7 @@
function testFilterFactory_OrFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'filter1': new bidichecker.FilterFactory.atText('friends'),
'filter2': new bidichecker.FilterFactory.locationId('friends'),
'opcode': 'OR'});
@@ -732,7 +732,7 @@
function testFilterFactory_PrecededByTextFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'precededByText': 'friends', 'opcode': 'PRECEDED_BY_TEXT'});
var expected = bidichecker.FilterFactory.precededByText('friends');
assertObjectEquals(expected, actual);
@@ -796,7 +796,7 @@
function testFilterFactory_PrecededByTextRegexpFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'precededByTextRegexp': 'friends', 'opcode': 'PRECEDED_BY_TEXT_REGEXP'});
var expected = bidichecker.FilterFactory.precededByTextRegexp('friends');
assertObjectEquals(expected, actual);
@@ -860,7 +860,7 @@
function testFilterFactory_SeverityFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'severityThreshold': 2, 'opcode': 'SEVERITY'});
var expected = bidichecker.FilterFactory.severityFrom(2);
assertObjectEquals(expected, actual);
@@ -889,7 +889,7 @@
function testFilterFactory_TypeFilterConstruct() {
- var actual = bidichecker.FilterFactory.constructFilter(
+ var actual = bidichecker.FilterFactory.constructFilter_(
{'type': 'friends', 'opcode': 'TYPE'});
var expected = bidichecker.FilterFactory.type('friends');
assertObjectEquals(expected, actual);