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