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 |