]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/locale/src/util/locale_data.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / locale / src / util / locale_data.cpp
CommitLineData
7c673cae
FG
1//
2// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
3//
4// Distributed under the Boost Software License, Version 1.0. (See
5// accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//
8#define BOOST_LOCALE_SOURCE
9#include "locale_data.hpp"
10#include "../encoding/conv.hpp"
11#include <string>
12
13namespace boost {
14namespace locale {
15namespace util {
16 void locale_data::parse(std::string const &locale_name)
17 {
18 language = "C";
19 country.clear();
20 variant.clear();
21 encoding = "us-ascii";
22 utf8=false;
23 parse_from_lang(locale_name);
24 }
25
26 void locale_data::parse_from_lang(std::string const &locale_name)
27 {
28 size_t end = locale_name.find_first_of("-_@.");
29 std::string tmp = locale_name.substr(0,end);
30 if(tmp.empty())
31 return;
32 for(unsigned i=0;i<tmp.size();i++) {
33 if('A' <= tmp[i] && tmp[i]<='Z')
34 tmp[i]=tmp[i]-'A'+'a';
92f5a8d4 35 else if(tmp[i] < 'a' || 'z' < tmp[i])
7c673cae
FG
36 return;
37 }
38 language = tmp;
39 if(end >= locale_name.size())
40 return;
41
42 if(locale_name[end] == '-' || locale_name[end]=='_') {
43 parse_from_country(locale_name.substr(end+1));
44 }
45 else if(locale_name[end] == '.') {
46 parse_from_encoding(locale_name.substr(end+1));
47 }
48 else if(locale_name[end] == '@') {
49 parse_from_variant(locale_name.substr(end+1));
50 }
51 }
52
53 void locale_data::parse_from_country(std::string const &locale_name)
54 {
55 size_t end = locale_name.find_first_of("@.");
56 std::string tmp = locale_name.substr(0,end);
57 if(tmp.empty())
58 return;
59 for(unsigned i=0;i<tmp.size();i++) {
11fdf7f2 60 if('a' <= tmp[i] && tmp[i]<='z')
7c673cae 61 tmp[i]=tmp[i]-'a'+'A';
92f5a8d4 62 else if(tmp[i] < 'A' || 'Z' < tmp[i])
7c673cae
FG
63 return;
64 }
65
66 country = tmp;
67
68 if(end >= locale_name.size())
69 return;
70 else if(locale_name[end] == '.') {
71 parse_from_encoding(locale_name.substr(end+1));
72 }
73 else if(locale_name[end] == '@') {
74 parse_from_variant(locale_name.substr(end+1));
75 }
76 }
77
78 void locale_data::parse_from_encoding(std::string const &locale_name)
79 {
80 size_t end = locale_name.find_first_of("@");
81 std::string tmp = locale_name.substr(0,end);
82 if(tmp.empty())
83 return;
84 for(unsigned i=0;i<tmp.size();i++) {
85 if('A' <= tmp[i] && tmp[i]<='Z')
86 tmp[i]=tmp[i]-'A'+'a';
87 }
88 encoding = tmp;
89
90 utf8 = conv::impl::normalize_encoding(encoding.c_str()) == "utf8";
91
92 if(end >= locale_name.size())
93 return;
94
95 if(locale_name[end] == '@') {
96 parse_from_variant(locale_name.substr(end+1));
97 }
98 }
99
100 void locale_data::parse_from_variant(std::string const &locale_name)
101 {
102 variant = locale_name;
103 for(unsigned i=0;i<variant.size();i++) {
104 if('A' <= variant[i] && variant[i]<='Z')
105 variant[i]=variant[i]-'A'+'a';
106 }
107 }
108
109} // util
110} // locale
111} // boost
112
113// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4