2
2
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4
4
* Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
6
6
* The contents of this file are subject to the terms of either the GNU Lesser
7
7
* General Public License Version 2.1 only ("LGPL") or the Common Development and
8
8
* Distribution License ("CDDL")(collectively, the "License"). You may not use this
9
9
* file except in compliance with the License. You can obtain a copy of the CDDL at
10
10
* http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at
11
* http://www.opensource.org/licenses/lgpl-license.php. See the License for the
11
* http://www.opensource.org/licenses/lgpl-license.php. See the License for the
12
12
* specific language governing permissions and limitations under the License. When
13
13
* distributing the software, include this License Header Notice in each file and
14
14
* include the full text of the License in the License file as well as the
15
15
* following notice:
17
17
* NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
19
19
* For Covered Software in this distribution, this License shall be governed by the
21
21
* Any litigation relating to this License shall be subject to the jurisdiction of
22
22
* the Federal Courts of the Northern District of California and the state courts
23
23
* of the State of California, with venue lying in Santa Clara County, California.
27
27
* If you wish your version of this file to be governed by only the CDDL or only
28
28
* the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to
29
29
* include this software in this distribution under the [CDDL or LGPL Version 2.1]
32
32
* Version 2.1, or to extend the choice of license to its licensees as provided
33
33
* above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL
34
34
* Version 2 license, then the option applies only if the new code is made subject
35
* to such option by the copyright holder.
35
* to such option by the copyright holder.
38
38
#include "imi_funcobjs.h"
40
void CGetFullSymbolOp::initSymbolMap ()
41
CGetFullSymbolOp::initSymbolMap()
45
46
static const char half_symbol[] = "azAZ";
50
51
MBSTOWCS(&cwstr[0], src, (sizeof(cwstr) / sizeof(TWCHAR)) - 1);
52
53
TWCHAR wch = cwstr[0];
53
for (char h=half_symbol[0], t=half_symbol[1]; h <= t; ++h, ++wch)
54
for (char h = half_symbol[0], t = half_symbol[1]; h <= t; ++h, ++wch)
54
55
m_symbolMap[h] = wch;
57
for (char h=half_symbol[2], t=half_symbol[3]; h <= t; ++h, ++wch)
58
for (char h = half_symbol[2], t = half_symbol[3]; h <= t; ++h, ++wch)
58
59
m_symbolMap[h] = wch;
61
const wstring& CGetFullSymbolOp::operator () (unsigned ch)
63
CGetFullSymbolOp::operator ()(unsigned ch)
63
65
static wstring ret;
65
67
if (m_symbolMap.empty())
68
CSymbolMap::iterator it1 = m_symbolMap.find (ch);
70
CSymbolMap::iterator it1 = m_symbolMap.find(ch);
69
71
if (it1 != m_symbolMap.end())
70
72
return it1->second;
75
77
CGetFullPunctOp::CGetFullPunctOp()
78
void CGetFullPunctOp::initPunctMap (const string_pairs& punc_map)
82
CGetFullPunctOp::initPunctMap(const string_pairs& punc_map)
82
86
m_punctMap.clear();
83
87
m_punctClosingSts.clear();
85
string_pairs::const_iterator it = punc_map.begin();
89
string_pairs::const_iterator it = punc_map.begin();
86
90
string_pairs::const_iterator ite = punc_map.end();
88
for (; it != ite; ++it)
92
for (; it != ite; ++it) {
90
93
const char *k = it->first.c_str();
91
94
const char *v = it->second.c_str();
95
98
memset(cwstr, 0, sizeof(cwstr));
96
99
MBSTOWCS(&cwstr[0], v, (sizeof(cwstr) / sizeof(TWCHAR)) - 1);
98
101
unsigned key = *k;
99
if (m_punctMap.find(*k) != m_punctMap.end ()) {
100
m_punctClosingSts.insert (std::make_pair (key, false));
102
if (m_punctMap.find(*k) != m_punctMap.end()) {
103
m_punctClosingSts.insert(std::make_pair(key, false));
101
104
key |= 0x80000000;
104
m_punctMap[key] = wstring (cwstr);
107
m_punctMap[key] = wstring(cwstr);
108
const wstring& CGetFullPunctOp::operator () (unsigned ch)
112
CGetFullPunctOp::operator ()(unsigned ch)
110
114
static wstring ret;
111
CPunctClosingStates::iterator it = m_punctClosingSts.find (ch);
112
if (it != m_punctClosingSts.end ()) {
115
CPunctClosingStates::iterator it = m_punctClosingSts.find(ch);
116
if (it != m_punctClosingSts.end()) {
113
117
if (it->second) ch |= 0x80000000;
114
118
it->second = !it->second;
117
CPunctMap::iterator it1 = m_punctMap.find (ch);
121
CPunctMap::iterator it1 = m_punctMap.find(ch);
118
122
if (it1 != m_punctMap.end())
119
123
return it1->second;