OSDN Git Service

CMake warning fix
[kde/libdbusmenu-qt.git] / src / utils.cpp
1 /* This file is part of the dbusmenu-qt library
2    Copyright 2010 Canonical
3    Author: Aurelien Gateau <aurelien.gateau@canonical.com>
4
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public
7    License (LGPL) as published by the Free Software Foundation;
8    either version 2 of the License, or (at your option) any later
9    version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public License
17    along with this library; see the file COPYING.LIB.  If not, write to
18    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19    Boston, MA 02110-1301, USA.
20 */
21 #include "utils_p.h"
22
23 // Qt
24 #include <QString>
25
26 QString swapMnemonicChar(const QString &in, const char src, const char dst)
27 {
28     QString out;
29     bool mnemonicFound = false;
30
31     for (int pos = 0; pos < in.length(); ) {
32         QChar ch = in[pos];
33         if (ch == src) {
34             if (pos == in.length() - 1) {
35                 // 'src' at the end of string, skip it
36                 ++pos;
37             } else {
38                 if (in[pos + 1] == src) {
39                     // A real 'src'
40                     out += src;
41                     pos += 2;
42                 } else if (!mnemonicFound) {
43                     // We found the mnemonic
44                     mnemonicFound = true;
45                     out += dst;
46                     ++pos;
47                 } else {
48                     // We already have a mnemonic, just skip the char
49                     ++pos;
50                 }
51             }
52         } else if (ch == dst) {
53             // Escape 'dst'
54             out += dst;
55             out += dst;
56             ++pos;
57         } else {
58             out += ch;
59             ++pos;
60         }
61     }
62
63     return out;
64 }