// Copyright 2007 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** * @fileoverview DOM patterns. Allows for description of complex DOM patterns * using regular expression like constructs. * * @author robbyw@google.com (Robby Walker) */ goog.provide('goog.dom.pattern'); goog.provide('goog.dom.pattern.MatchType'); /** * Utility function to match a string against either a string or a regular * expression. * * @param {string|RegExp} obj Either a string or a regular expression. * @param {string} str The string to match. * @return {boolean} Whether the strings are equal, or if the string matches * the regular expression. */ goog.dom.pattern.matchStringOrRegex = function(obj, str) { if (goog.isString(obj)) { // Match a string return str == obj; } else { // Match a regular expression return !!(str && str.match(obj)); } }; /** * Utility function to match a DOM attribute against either a string or a * regular expression. Conforms to the interface spec for * {@link goog.object#every}. * * @param {string|RegExp} elem Either a string or a regular expression. * @param {string} index The attribute name to match. * @param {Object} orig The original map of matches to test. * @return {boolean} Whether the strings are equal, or if the attribute matches * the regular expression. * @this {Element} Called using goog.object every on an Element. */ goog.dom.pattern.matchStringOrRegexMap = function(elem, index, orig) { return goog.dom.pattern.matchStringOrRegex( elem, index in this ? this[index] : (this.getAttribute ? this.getAttribute(index) : null)); }; /** * When matched to a token, a pattern may return any of the following statuses: *
    *
  1. NO_MATCH - The pattern does not match. This is the only * value that evaluates to false in a boolean context. *
  2. MATCHING - The token is part of an incomplete match. *
  3. MATCH - The token completes a match. *
  4. BACKTRACK_MATCH - The token does not match, but indicates * the end of a repetitive match. For instance, in regular expressions, * the pattern /a+/ would match 'aaaaaaaab'. * Every 'a' token would give a status of * MATCHING while the 'b' token would give a * status of BACKTRACK_MATCH. *
* @enum {number} */ goog.dom.pattern.MatchType = { NO_MATCH: 0, MATCHING: 1, MATCH: 2, BACKTRACK_MATCH: 3 };