1/* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31WebInspector.TextUtils = { 32 /** 33 * @param {string} char 34 * @return {boolean} 35 */ 36 isStopChar: function(char) 37 { 38 return (char > " " && char < "0") || 39 (char > "9" && char < "A") || 40 (char > "Z" && char < "_") || 41 (char > "_" && char < "a") || 42 (char > "z" && char <= "~"); 43 }, 44 45 /** 46 * @param {string} char 47 * @return {boolean} 48 */ 49 isWordChar: function(char) 50 { 51 return !WebInspector.TextUtils.isStopChar(char) && !WebInspector.TextUtils.isSpaceChar(char); 52 }, 53 54 /** 55 * @param {string} char 56 * @return {boolean} 57 */ 58 isSpaceChar: function(char) 59 { 60 return WebInspector.TextUtils._SpaceCharRegex.test(char); 61 }, 62 63 /** 64 * @param {string} word 65 * @return {boolean} 66 */ 67 isWord: function(word) 68 { 69 for (var i = 0; i < word.length; ++i) { 70 if (!WebInspector.TextUtils.isWordChar(word.charAt(i))) 71 return false; 72 } 73 return true; 74 }, 75 76 /** 77 * @param {string} char 78 * @return {boolean} 79 */ 80 isOpeningBraceChar: function(char) 81 { 82 return char === "(" || char === "{"; 83 }, 84 85 /** 86 * @param {string} char 87 * @return {boolean} 88 */ 89 isClosingBraceChar: function(char) 90 { 91 return char === ")" || char === "}"; 92 }, 93 94 /** 95 * @param {string} char 96 * @return {boolean} 97 */ 98 isBraceChar: function(char) 99 { 100 return WebInspector.TextUtils.isOpeningBraceChar(char) || WebInspector.TextUtils.isClosingBraceChar(char); 101 }, 102 103 /** 104 * @param {string} text 105 * @param {function(string):boolean} isWordChar 106 * @return {!Array.<string>} 107 */ 108 textToWords: function(text, isWordChar) 109 { 110 var words = []; 111 var startWord = -1; 112 for(var i = 0; i < text.length; ++i) { 113 if (!isWordChar(text.charAt(i))) { 114 if (startWord !== -1) 115 words.push(text.substring(startWord, i)); 116 startWord = -1; 117 } else if (startWord === -1) 118 startWord = i; 119 } 120 if (startWord !== -1) 121 words.push(text.substring(startWord)); 122 return words; 123 }, 124 125 /** 126 * @param {string} source 127 * @param {number=} startIndex 128 * @param {number=} lastIndex 129 * @return {number} 130 */ 131 findBalancedCurlyBrackets: function(source, startIndex, lastIndex) { 132 lastIndex = lastIndex || source.length; 133 startIndex = startIndex || 0; 134 var counter = 0; 135 var inString = false; 136 137 for (var index = startIndex; index < lastIndex; ++index) { 138 var character = source[index]; 139 if (inString) { 140 if (character === "\\") 141 ++index; 142 else if (character === "\"") 143 inString = false; 144 } else { 145 if (character === "\"") 146 inString = true; 147 else if (character === "{") 148 ++counter; 149 else if (character === "}") { 150 if (--counter === 0) 151 return index + 1; 152 } 153 } 154 } 155 return -1; 156 } 157} 158 159WebInspector.TextUtils._SpaceCharRegex = /\s/; 160 161/** 162 * @enum {string} 163 */ 164WebInspector.TextUtils.Indent = { 165 TwoSpaces: " ", 166 FourSpaces: " ", 167 EightSpaces: " ", 168 TabCharacter: "\t" 169} 170