Main Page
Namespaces
Classes
Files
File List
File Members
src
glib
gxtext.cpp
Go to the documentation of this file.
1
//
2
// Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
3
//
4
// This program is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
// ===
17
//
18
// gxtext.cpp
19
//
20
21
#include "gdef.h"
22
#include "
gxtext.h
"
23
#include "
gassert.h
"
24
25
namespace
26
{
27
inline
char
hex(
unsigned
int
n )
28
{
29
static
const
char
* map =
"0123456789ABCDEF"
;
30
return
map[n] ;
31
}
32
inline
unsigned
int
unhex(
char
c )
33
{
34
unsigned
int
rc = 0U ;
35
switch
( c )
36
{
37
case
'0'
: rc = 0U ; break ;
38
case
'1'
: rc = 1U ; break ;
39
case
'2'
: rc = 2U ; break ;
40
case
'3'
: rc = 3U ; break ;
41
case
'4'
: rc = 4U ; break ;
42
case
'5'
: rc = 5U ; break ;
43
case
'6'
: rc = 6U ; break ;
44
case
'7'
: rc = 7U ; break ;
45
case
'8'
: rc = 8U ; break ;
46
case
'9'
: rc = 9U ; break ;
47
case
'A'
: rc = 10U ; break ;
48
case
'B'
: rc = 11U ; break ;
49
case
'C'
: rc = 12U ; break ;
50
case
'D'
: rc = 13U ; break ;
51
case
'E'
: rc = 14U ; break ;
52
case
'F'
: rc = 15U ; break ;
53
}
54
return
rc ;
55
}
56
}
57
58
std::string
G::Xtext::encode
(
const
std::string & s )
59
{
60
std::string result ;
61
for
( std::string::const_iterator p = s.begin() ; p != s.end() ; ++p )
62
{
63
if
( *p >=
'!'
&& *p <=
'~'
&& *p !=
'='
&& *p !=
'+'
)
64
{
65
result.append( 1U , *p ) ;
66
}
67
else
68
{
69
unsigned
int
n =
static_cast<
unsigned
char
>
(*p) ;
70
result.append( 1U ,
'+'
) ;
71
result.append( 1U , hex( n >> 4U ) ) ;
72
result.append( 1U , hex( n & 0x0f ) ) ;
73
}
74
}
75
G_ASSERT
(
decode
(result) == s ) ;
76
return
result ;
77
}
78
79
std::string
G::Xtext::decode
(
const
std::string & s )
80
{
81
std::string result ;
82
for
(
const
char
* p = s.c_str() ; *p ; p++ )
83
{
84
if
( *p ==
'+'
&& p[1U] && p[2U] )
85
{
86
unsigned
int
c = ( unhex(p[1U]) << 4U ) | unhex(p[2U]) ;
87
result.append( 1U , static_cast<char>(static_cast<unsigned char>(c)) ) ;
88
p += 2U ;
89
}
90
else
91
{
92
result.append( 1U , *p ) ;
93
}
94
}
95
return
result ;
96
}
97
G::Xtext::decode
static std::string decode(const std::string &)
Decodes the given string.
Definition:
gxtext.cpp:79
G::Xtext::encode
static std::string encode(const std::string &)
Encodes the given string.
Definition:
gxtext.cpp:58
G_ASSERT
#define G_ASSERT(test)
Definition:
gassert.h:30
gassert.h
gxtext.h
Generated on Mon Oct 30 2017 20:15:42 for E-MailRelay by
1.8.8