Updating makefil
[apertium.git] / apertium-tools / apertium-utils / morph-indux / XMLParseUtil.cpp
blob82868f98863c48c70c296256ffabe3216e81f3de
1 #include <XMLParseUtil.h>
3 #include <cstdlib>
4 #include <iostream>
6 using namespace std;
8 wstring
9 XMLParseUtil::attrib(xmlTextReaderPtr reader, wstring const &name)
11 string mystr = "";
12 for(int i = 0, limit = name.size(); i != limit; i++)
14 mystr += static_cast<char>(name[i]);
17 xmlChar *attrname = xmlCharStrdup(mystr.c_str());
18 xmlChar *myattr = xmlTextReaderGetAttribute(reader, attrname);
19 wstring result = towstring(myattr);
20 xmlFree(myattr);
21 xmlFree(attrname);
22 return result;
25 string
26 XMLParseUtil::latin1(xmlChar const *input)
28 if(input == NULL)
30 return "";
33 int outputlen = xmlStrlen(input) + 1;
34 int inputlen = xmlStrlen(input);
36 unsigned char output[outputlen];
38 if(UTF8Toisolat1(output, &outputlen, input, &inputlen) != 0)
42 output[outputlen] = 0;
43 string result = reinterpret_cast<char *>(output);
44 return result;
47 wstring
48 XMLParseUtil::towstring(xmlChar const * input)
50 wstring result = L"";
52 for(int i = 0, limit = xmlStrlen(input); i != limit; i++)
54 int val = 0;
55 if(((unsigned char) input[i] & 0x80) == 0x0)
57 val = static_cast<wchar_t>(input[i]);
59 else if(((unsigned char) input[i] & 0xE0) == 0xC0)
61 val = (input[i] & 0x1F) << 6;
62 i++;
63 val += input[i] & 0x7F;
65 else if(((unsigned char) input[i] & 0xF0) == 0xE0)
67 val = (input[i] & 0x0F) << 6;
68 i++;
69 val += input[i] & 0x7F;
70 val = val << 6;
71 i++;
72 val += input[i] & 0x7F;
74 else if(((unsigned char) input[i] & 0xF8) == 0xF0)
76 val = (input[i] & 0x07) << 6;
77 i++;
78 val += input[i] & 0x7F;
79 val = val << 6;
80 i++;
81 val += input[i] & 0x7F;
82 val = val << 6;
83 i++;
84 val += input[i] & 0x7F;
86 else
88 wcerr << L"UTF-8 invalid string" << endl;
89 exit(EXIT_FAILURE);
92 result += static_cast<wchar_t>(val);
94 return result;
97 wstring
98 XMLParseUtil::stows(string const &str)
100 wchar_t result[str.size()];
101 mbstowcs(result, str.c_str(), str.size());
102 wstring result2 = result;
103 return result2;