12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/text_utils.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/i18n/char_iterator.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)base::string16 RemoveAcceleratorChar(const base::string16& s,
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                     base::char16 accelerator_char,
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                     int* accelerated_char_pos,
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                     int* accelerated_char_span) {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool escaped = false;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ptrdiff_t last_char_pos = -1;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int last_char_span = 0;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::i18n::UTF16CharIterator chars(&s);
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::string16 accelerator_removed;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  accelerator_removed.reserve(s.size());
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (!chars.end()) {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32 c = chars.get();
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int array_pos = chars.array_pos();
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chars.Advance();
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (c != accelerator_char || escaped) {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int span = chars.array_pos() - array_pos;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (escaped && c != accelerator_char) {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        last_char_pos = accelerator_removed.size();
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        last_char_span = span;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for (int i = 0; i < span; i++)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        accelerator_removed.push_back(s[array_pos + i]);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      escaped = false;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      escaped = true;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (accelerated_char_pos)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    *accelerated_char_pos = last_char_pos;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (accelerated_char_span)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    *accelerated_char_span = last_char_span;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return accelerator_removed;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace gfx
50