1 #ifndef MESH_IO_TEXT_H_INCLUDED
2 #define MESH_IO_TEXT_H_INCLUDED
31 cstr(const char *begin, const char *end)
32 : begin_(begin), end_(end)
35 bool operator==(const char *rhs)const
38 for(const char *r=rhs; *r; ++r, ++l){
49 bool operator!=(const char *rhs)const
54 bool include(char c)const
56 for(const char *l=begin_; l!=end_; ++l){
64 bool startswith(const char *rhs)
67 for(const char *l=begin_; l!=end_ && *r!='\0'; ++l, ++r){
80 std::string str()const{ return std::string(begin_, end_); }
81 const char* begin()const{ return begin_; }
82 const char* end()const{ return end_; }
83 std::pair<const char*, const char*> range()const{
84 return std::make_pair(begin_, end_);
87 template<typename IsTrim>
88 cstr &trim(IsTrim isTrim){
89 while(begin_!=end_ && isTrim(*begin_)){
92 while(end_!=begin_ && isTrim(end_[-1])){
99 inline std::ostream &operator<<(std::ostream &os, const cstr &rhs)
101 return os << rhs.str();
116 fixed_string(const std::string &str)
121 fixed_string& operator=(const std::string &src)
126 void assign(const std::string &src)
131 std::string::const_iterator it=src.begin();
134 i<LENGTH && it!=src.end();
144 size_t size()const { return LENGTH; }
145 char *begin() { return begin_; }
146 const char *begin() const { return begin_; }
147 std::string str() const
149 const char *end=begin_;
150 for(; end!=end_ && *end!='\0'; ++end){
153 static_cast<const char*>(begin_),
154 static_cast<const char*>(end));
159 inline std::ostream &operator<<(std::ostream &os, const fixed_string<LENGTH> &rhs)
161 return os << rhs.str();
165 #if defined(_MSC_VER)
166 inline std::wstring to_WideChar(UINT uCodePage, const std::string &text)
168 int size=MultiByteToWideChar(uCodePage, 0, text.c_str(), -1, NULL, 0);
169 std::vector<wchar_t> buf(size);
170 size=MultiByteToWideChar(uCodePage, 0, text.c_str(), -1, &buf[0], buf.size());
171 return std::wstring(buf.begin(), buf.begin()+size);
174 inline std::string to_MultiByte(UINT uCodePage, const std::wstring &text)
176 int size=WideCharToMultiByte(uCodePage, 0, text.c_str(), -1, NULL, 0, 0, NULL);
177 std::vector<char> buf(size);
178 size=WideCharToMultiByte(uCodePage, 0, text.c_str(), -1, &buf[0], buf.size(), 0, NULL);
179 return std::string(buf.begin(), buf.begin()+size);
182 inline std::wstring cp932_to_unicode(const std::string &text)
184 return to_WideChar(CP_OEMCP, text);
187 inline std::string cp932_to_utf8(const std::string &text)
189 return to_MultiByte(CP_UTF8, to_WideChar(CP_OEMCP, text));
193 inline std::wstring to_unicode(const char *text, const char *fromcode)
195 const char* tocode="WCHAR_T";
196 iconv_t cd=iconv_open(tocode, fromcode);
198 std::cerr << "fail to iconv_open: " << fromcode << " --> " << tocode << std::endl;
203 size_t inbytesleft=std::strlen(text);
204 char *inbuf=const_cast<char*>(text);
206 std::vector<wchar_t> buf;
208 size_t outbytesleft=0;
211 buf.resize(buf.size()+inbytesleft);
212 wchar_t *woutbuf=&buf[pos];
213 outbytesleft=(buf.size()-pos)*sizeof(wchar_t);
214 int ret=iconv(cd, &inbuf, &inbytesleft, (char**)&woutbuf, &outbytesleft);
216 std::cerr << "fail to iconv" << std::endl;
229 inline std::wstring cp932_to_unicode(const std::string &text)
231 return to_unicode(text.c_str(), "CP932");
235 inline std::wstring trim(const std::wstring &src){
236 std::wstring::const_iterator end=src.begin();
237 for(; end!=src.end(); ++end){
242 return std::wstring(src.begin(), end);
245 } // namespace meshio
246 #endif // MESH_IO_TEXT_H_INCLUDED