Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 self['Common'] = self['Common'] || {}; | 5 self['TextUtils'] = self['TextUtils'] || {}; |
|
dgozman
2017/03/22 22:54:12
Can we remove this line?
lushnikov
2017/03/23 00:50:50
Done.
| |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @unrestricted | 8 * @unrestricted |
| 9 */ | 9 */ |
| 10 Common.Text = class { | 10 TextUtils.Text = class { |
| 11 /** | 11 /** |
| 12 * @param {string} value | 12 * @param {string} value |
| 13 */ | 13 */ |
| 14 constructor(value) { | 14 constructor(value) { |
| 15 this._value = value; | 15 this._value = value; |
| 16 } | 16 } |
| 17 | 17 |
| 18 /** | 18 /** |
| 19 * @return {!Array<number>} | 19 * @return {!Array<number>} |
| 20 */ | 20 */ |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 43 * @param {number} lineNumber | 43 * @param {number} lineNumber |
| 44 * @param {number} columnNumber | 44 * @param {number} columnNumber |
| 45 * @return {number} | 45 * @return {number} |
| 46 */ | 46 */ |
| 47 offsetFromPosition(lineNumber, columnNumber) { | 47 offsetFromPosition(lineNumber, columnNumber) { |
| 48 return (lineNumber ? this.lineEndings()[lineNumber - 1] + 1 : 0) + columnNum ber; | 48 return (lineNumber ? this.lineEndings()[lineNumber - 1] + 1 : 0) + columnNum ber; |
| 49 } | 49 } |
| 50 | 50 |
| 51 /** | 51 /** |
| 52 * @param {number} offset | 52 * @param {number} offset |
| 53 * @return {!Common.Text.Position} | 53 * @return {!TextUtils.Text.Position} |
| 54 */ | 54 */ |
| 55 positionFromOffset(offset) { | 55 positionFromOffset(offset) { |
| 56 var lineEndings = this.lineEndings(); | 56 var lineEndings = this.lineEndings(); |
| 57 var lineNumber = lineEndings.lowerBound(offset); | 57 var lineNumber = lineEndings.lowerBound(offset); |
| 58 return {lineNumber: lineNumber, columnNumber: offset - (lineNumber && (lineE ndings[lineNumber - 1] + 1))}; | 58 return {lineNumber: lineNumber, columnNumber: offset - (lineNumber && (lineE ndings[lineNumber - 1] + 1))}; |
| 59 } | 59 } |
| 60 | 60 |
| 61 /** | 61 /** |
| 62 * @return {string} | 62 * @return {string} |
| 63 */ | 63 */ |
| 64 lineAt(lineNumber) { | 64 lineAt(lineNumber) { |
| 65 var lineEndings = this.lineEndings(); | 65 var lineEndings = this.lineEndings(); |
| 66 var lineStart = lineNumber > 0 ? lineEndings[lineNumber - 1] + 1 : 0; | 66 var lineStart = lineNumber > 0 ? lineEndings[lineNumber - 1] + 1 : 0; |
| 67 var lineEnd = lineEndings[lineNumber]; | 67 var lineEnd = lineEndings[lineNumber]; |
| 68 var lineContent = this._value.substring(lineStart, lineEnd); | 68 var lineContent = this._value.substring(lineStart, lineEnd); |
| 69 if (lineContent.length > 0 && lineContent.charAt(lineContent.length - 1) === '\r') | 69 if (lineContent.length > 0 && lineContent.charAt(lineContent.length - 1) === '\r') |
| 70 lineContent = lineContent.substring(0, lineContent.length - 1); | 70 lineContent = lineContent.substring(0, lineContent.length - 1); |
| 71 return lineContent; | 71 return lineContent; |
| 72 } | 72 } |
| 73 | 73 |
| 74 /** | 74 /** |
| 75 * @param {!Common.TextRange} range | 75 * @param {!TextUtils.TextRange} range |
| 76 * @return {!Common.SourceRange} | 76 * @return {!TextUtils.SourceRange} |
| 77 */ | 77 */ |
| 78 toSourceRange(range) { | 78 toSourceRange(range) { |
| 79 var start = this.offsetFromPosition(range.startLine, range.startColumn); | 79 var start = this.offsetFromPosition(range.startLine, range.startColumn); |
| 80 var end = this.offsetFromPosition(range.endLine, range.endColumn); | 80 var end = this.offsetFromPosition(range.endLine, range.endColumn); |
| 81 return new Common.SourceRange(start, end - start); | 81 return new TextUtils.SourceRange(start, end - start); |
| 82 } | 82 } |
| 83 | 83 |
| 84 /** | 84 /** |
| 85 * @param {!Common.SourceRange} sourceRange | 85 * @param {!TextUtils.SourceRange} sourceRange |
| 86 * @return {!Common.TextRange} | 86 * @return {!TextUtils.TextRange} |
| 87 */ | 87 */ |
| 88 toTextRange(sourceRange) { | 88 toTextRange(sourceRange) { |
| 89 var cursor = new Common.TextCursor(this.lineEndings()); | 89 var cursor = new TextUtils.TextCursor(this.lineEndings()); |
| 90 var result = Common.TextRange.createFromLocation(0, 0); | 90 var result = TextUtils.TextRange.createFromLocation(0, 0); |
| 91 | 91 |
| 92 cursor.resetTo(sourceRange.offset); | 92 cursor.resetTo(sourceRange.offset); |
| 93 result.startLine = cursor.lineNumber(); | 93 result.startLine = cursor.lineNumber(); |
| 94 result.startColumn = cursor.columnNumber(); | 94 result.startColumn = cursor.columnNumber(); |
| 95 | 95 |
| 96 cursor.advance(sourceRange.offset + sourceRange.length); | 96 cursor.advance(sourceRange.offset + sourceRange.length); |
| 97 result.endLine = cursor.lineNumber(); | 97 result.endLine = cursor.lineNumber(); |
| 98 result.endColumn = cursor.columnNumber(); | 98 result.endColumn = cursor.columnNumber(); |
| 99 return result; | 99 return result; |
| 100 } | 100 } |
| 101 | 101 |
| 102 /** | 102 /** |
| 103 * @param {!Common.TextRange} range | 103 * @param {!TextUtils.TextRange} range |
| 104 * @param {string} replacement | 104 * @param {string} replacement |
| 105 * @return {string} | 105 * @return {string} |
| 106 */ | 106 */ |
| 107 replaceRange(range, replacement) { | 107 replaceRange(range, replacement) { |
| 108 var sourceRange = this.toSourceRange(range); | 108 var sourceRange = this.toSourceRange(range); |
| 109 return this._value.substring(0, sourceRange.offset) + replacement + | 109 return this._value.substring(0, sourceRange.offset) + replacement + |
| 110 this._value.substring(sourceRange.offset + sourceRange.length); | 110 this._value.substring(sourceRange.offset + sourceRange.length); |
| 111 } | 111 } |
| 112 | 112 |
| 113 /** | 113 /** |
| 114 * @param {!Common.TextRange} range | 114 * @param {!TextUtils.TextRange} range |
| 115 * @return {string} | 115 * @return {string} |
| 116 */ | 116 */ |
| 117 extract(range) { | 117 extract(range) { |
| 118 var sourceRange = this.toSourceRange(range); | 118 var sourceRange = this.toSourceRange(range); |
| 119 return this._value.substr(sourceRange.offset, sourceRange.length); | 119 return this._value.substr(sourceRange.offset, sourceRange.length); |
| 120 } | 120 } |
| 121 }; | 121 }; |
| 122 | 122 |
| 123 /** @typedef {{lineNumber: number, columnNumber: number}} */ | 123 /** @typedef {{lineNumber: number, columnNumber: number}} */ |
| 124 Common.Text.Position; | 124 TextUtils.Text.Position; |
| 125 | 125 |
| 126 /** | 126 /** |
| 127 * @unrestricted | 127 * @unrestricted |
| 128 */ | 128 */ |
| 129 Common.TextCursor = class { | 129 TextUtils.TextCursor = class { |
| 130 /** | 130 /** |
| 131 * @param {!Array<number>} lineEndings | 131 * @param {!Array<number>} lineEndings |
| 132 */ | 132 */ |
| 133 constructor(lineEndings) { | 133 constructor(lineEndings) { |
| 134 this._lineEndings = lineEndings; | 134 this._lineEndings = lineEndings; |
| 135 this._offset = 0; | 135 this._offset = 0; |
| 136 this._lineNumber = 0; | 136 this._lineNumber = 0; |
| 137 this._columnNumber = 0; | 137 this._columnNumber = 0; |
| 138 } | 138 } |
| 139 | 139 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 170 return this._lineNumber; | 170 return this._lineNumber; |
| 171 } | 171 } |
| 172 | 172 |
| 173 /** | 173 /** |
| 174 * @return {number} | 174 * @return {number} |
| 175 */ | 175 */ |
| 176 columnNumber() { | 176 columnNumber() { |
| 177 return this._columnNumber; | 177 return this._columnNumber; |
| 178 } | 178 } |
| 179 }; | 179 }; |
| OLD | NEW |