Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator.js

Issue 2939273002: DO NOT SUBMIT: what chrome/browser/resources/ could eventually look like with clang-format (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 /** 5 /**
6 * @fileoverview Translates text to braille, optionally with some parts 6 * @fileoverview Translates text to braille, optionally with some parts
7 * uncontracted. 7 * uncontracted.
8 */ 8 */
9 9
10 goog.provide('cvox.ExpandingBrailleTranslator'); 10 goog.provide('cvox.ExpandingBrailleTranslator');
(...skipping 15 matching lines...) Expand all
26 * for all other text. When determining what text to use uncontracted 26 * for all other text. When determining what text to use uncontracted
27 * translation for around a position, a region surrounding that position 27 * translation for around a position, a region surrounding that position
28 * containing either only whitespace characters or only non-whitespace 28 * containing either only whitespace characters or only non-whitespace
29 * characters is used. 29 * characters is used.
30 * @param {!cvox.LibLouis.Translator} defaultTranslator The translator for all 30 * @param {!cvox.LibLouis.Translator} defaultTranslator The translator for all
31 * text when the uncontracted translator is not used. 31 * text when the uncontracted translator is not used.
32 * @param {cvox.LibLouis.Translator=} opt_uncontractedTranslator 32 * @param {cvox.LibLouis.Translator=} opt_uncontractedTranslator
33 * Translator to use for uncontracted braille translation. 33 * Translator to use for uncontracted braille translation.
34 * @constructor 34 * @constructor
35 */ 35 */
36 cvox.ExpandingBrailleTranslator = 36 cvox.ExpandingBrailleTranslator = function(
37 function(defaultTranslator, opt_uncontractedTranslator) { 37 defaultTranslator, opt_uncontractedTranslator) {
38 /** 38 /**
39 * @type {!cvox.LibLouis.Translator} 39 * @type {!cvox.LibLouis.Translator}
40 * @private 40 * @private
41 */ 41 */
42 this.defaultTranslator_ = defaultTranslator; 42 this.defaultTranslator_ = defaultTranslator;
43 /** 43 /**
44 * @type {cvox.LibLouis.Translator} 44 * @type {cvox.LibLouis.Translator}
45 * @private 45 * @private
46 */ 46 */
47 this.uncontractedTranslator_ = opt_uncontractedTranslator || null; 47 this.uncontractedTranslator_ = opt_uncontractedTranslator || null;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 /** 79 /**
80 * Translates text to braille using the translator(s) provided to the 80 * Translates text to braille using the translator(s) provided to the
81 * constructor. See {@code cvox.LibLouis.Translator} for further details. 81 * constructor. See {@code cvox.LibLouis.Translator} for further details.
82 * @param {!Spannable} text Text to translate. 82 * @param {!Spannable} text Text to translate.
83 * @param {cvox.ExpandingBrailleTranslator.ExpansionType} expansionType 83 * @param {cvox.ExpandingBrailleTranslator.ExpansionType} expansionType
84 * Indicates how the text marked by a value span, if any, is expanded. 84 * Indicates how the text marked by a value span, if any, is expanded.
85 * @param {function(!ArrayBuffer, !Array<number>, !Array<number>)} 85 * @param {function(!ArrayBuffer, !Array<number>, !Array<number>)}
86 * callback Called when the translation is done. It takes resulting 86 * callback Called when the translation is done. It takes resulting
87 * braille cells and positional mappings as parameters. 87 * braille cells and positional mappings as parameters.
88 */ 88 */
89 cvox.ExpandingBrailleTranslator.prototype.translate = 89 cvox.ExpandingBrailleTranslator.prototype.translate = function(
90 function(text, expansionType, callback) { 90 text, expansionType, callback) {
91 var expandRanges = this.findExpandRanges_(text, expansionType); 91 var expandRanges = this.findExpandRanges_(text, expansionType);
92 var extraCellsSpans = text.getSpansInstanceOf(cvox.ExtraCellsSpan) 92 var extraCellsSpans =
93 .filter(function(span) { return span.cells.byteLength > 0;}); 93 text.getSpansInstanceOf(cvox.ExtraCellsSpan).filter(function(span) {
94 return span.cells.byteLength > 0;
95 });
94 var extraCellsPositions = extraCellsSpans.map(function(span) { 96 var extraCellsPositions = extraCellsSpans.map(function(span) {
95 return text.getSpanStart(span); 97 return text.getSpanStart(span);
96 }); 98 });
97 if (expandRanges.length == 0 && extraCellsSpans.length == 0) { 99 if (expandRanges.length == 0 && extraCellsSpans.length == 0) {
98 this.defaultTranslator_.translate( 100 this.defaultTranslator_.translate(
99 text.toString(), 101 text.toString(),
100 cvox.ExpandingBrailleTranslator.nullParamsToEmptyAdapter_( 102 cvox.ExpandingBrailleTranslator.nullParamsToEmptyAdapter_(
101 text.length, callback)); 103 text.length, callback));
102 return; 104 return;
103 } 105 }
104 106
105 var chunks = []; 107 var chunks = [];
106 function maybeAddChunkToTranslate(translator, start, end) { 108 function maybeAddChunkToTranslate(translator, start, end) {
107 if (start < end) 109 if (start < end)
108 chunks.push({translator: translator, start: start, end: end}); 110 chunks.push({translator: translator, start: start, end: end});
109 } 111 }
110 function addExtraCellsChunk(pos, cells) { 112 function addExtraCellsChunk(pos, cells) {
111 var chunk = {translator: null, 113 var chunk = {
112 start: pos, 114 translator: null,
113 end: pos, 115 start: pos,
114 cells: cells, 116 end: pos,
115 textToBraille: [], 117 cells: cells,
116 brailleToText: new Array(cells.byteLength)}; 118 textToBraille: [],
119 brailleToText: new Array(cells.byteLength)
120 };
117 for (var i = 0; i < cells.byteLength; ++i) 121 for (var i = 0; i < cells.byteLength; ++i)
118 chunk.brailleToText[i] = 0; 122 chunk.brailleToText[i] = 0;
119 chunks.push(chunk); 123 chunks.push(chunk);
120 } 124 }
121 function addChunk(translator, start, end) { 125 function addChunk(translator, start, end) {
122 while (extraCellsSpans.length > 0 && extraCellsPositions[0] <= end) { 126 while (extraCellsSpans.length > 0 && extraCellsPositions[0] <= end) {
123 maybeAddChunkToTranslate(translator, start, extraCellsPositions[0]); 127 maybeAddChunkToTranslate(translator, start, extraCellsPositions[0]);
124 start = extraCellsPositions.shift(); 128 start = extraCellsPositions.shift();
125 addExtraCellsChunk(start, extraCellsSpans.shift().cells); 129 addExtraCellsChunk(start, extraCellsSpans.shift().cells);
126 } 130 }
(...skipping 17 matching lines...) Expand all
144 148
145 function chunkTranslated(chunk, cells, textToBraille, brailleToText) { 149 function chunkTranslated(chunk, cells, textToBraille, brailleToText) {
146 chunk.cells = cells; 150 chunk.cells = cells;
147 chunk.textToBraille = textToBraille; 151 chunk.textToBraille = textToBraille;
148 chunk.brailleToText = brailleToText; 152 chunk.brailleToText = brailleToText;
149 if (--numPendingCallbacks <= 0) 153 if (--numPendingCallbacks <= 0)
150 finish(); 154 finish();
151 } 155 }
152 156
153 function finish() { 157 function finish() {
154 var totalCells = chunks.reduce( 158 var totalCells = chunks.reduce(function(accum, chunk) {
155 function(accum, chunk) { return accum + chunk.cells.byteLength;}, 0); 159 return accum + chunk.cells.byteLength;
160 }, 0);
156 var cells = new Uint8Array(totalCells); 161 var cells = new Uint8Array(totalCells);
157 var cellPos = 0; 162 var cellPos = 0;
158 var textToBraille = []; 163 var textToBraille = [];
159 var brailleToText = []; 164 var brailleToText = [];
160 function appendAdjusted(array, toAppend, adjustment) { 165 function appendAdjusted(array, toAppend, adjustment) {
161 array.push.apply(array, toAppend.map( 166 array.push.apply(array, toAppend.map(function(elem) {
162 function(elem) { return adjustment + elem; } 167 return adjustment + elem;
163 )); 168 }));
164 } 169 }
165 for (var i = 0, chunk; chunk = chunks[i]; ++i) { 170 for (var i = 0, chunk; chunk = chunks[i]; ++i) {
166 cells.set(new Uint8Array(chunk.cells), cellPos); 171 cells.set(new Uint8Array(chunk.cells), cellPos);
167 appendAdjusted(textToBraille, chunk.textToBraille, cellPos); 172 appendAdjusted(textToBraille, chunk.textToBraille, cellPos);
168 appendAdjusted(brailleToText, chunk.brailleToText, chunk.start); 173 appendAdjusted(brailleToText, chunk.brailleToText, chunk.start);
169 cellPos += chunk.cells.byteLength; 174 cellPos += chunk.cells.byteLength;
170 } 175 }
171 callback(cells.buffer, textToBraille, brailleToText); 176 callback(cells.buffer, textToBraille, brailleToText);
172 } 177 }
173 178
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 * Adapts {@code callback} to accept null arguments and treat them as if the 314 * Adapts {@code callback} to accept null arguments and treat them as if the
310 * translation result is empty. 315 * translation result is empty.
311 * @param {number} inputLength Length of the input to the translation. 316 * @param {number} inputLength Length of the input to the translation.
312 * Used for populating {@code textToBraille} if null. 317 * Used for populating {@code textToBraille} if null.
313 * @param {function(!ArrayBuffer, !Array<number>, !Array<number>)} callback 318 * @param {function(!ArrayBuffer, !Array<number>, !Array<number>)} callback
314 * The callback to adapt. 319 * The callback to adapt.
315 * @return {function(ArrayBuffer, Array<number>, Array<number>)} 320 * @return {function(ArrayBuffer, Array<number>, Array<number>)}
316 * An adapted version of the callback. 321 * An adapted version of the callback.
317 * @private 322 * @private
318 */ 323 */
319 cvox.ExpandingBrailleTranslator.nullParamsToEmptyAdapter_ = 324 cvox.ExpandingBrailleTranslator.nullParamsToEmptyAdapter_ = function(
320 function(inputLength, callback) { 325 inputLength, callback) {
321 return function(cells, textToBraille, brailleToText) { 326 return function(cells, textToBraille, brailleToText) {
322 if (!textToBraille) { 327 if (!textToBraille) {
323 textToBraille = new Array(inputLength); 328 textToBraille = new Array(inputLength);
324 for (var i = 0; i < inputLength; ++i) { 329 for (var i = 0; i < inputLength; ++i) {
325 textToBraille[i] = 0; 330 textToBraille[i] = 0;
326 } 331 }
327 } 332 }
328 callback(cells || new ArrayBuffer(0), 333 callback(cells || new ArrayBuffer(0), textToBraille, brailleToText || []);
329 textToBraille,
330 brailleToText || []);
331 }; 334 };
332 }; 335 };
333 336
334 337
335 /** 338 /**
336 * A character range with inclusive start and exclusive end positions. 339 * A character range with inclusive start and exclusive end positions.
337 * @typedef {{start: number, end: number}} 340 * @typedef {{start: number, end: number}}
338 * @private 341 * @private
339 */ 342 */
340 cvox.ExpandingBrailleTranslator.Range_; 343 cvox.ExpandingBrailleTranslator.Range_;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698