Skip to content

Commit ad06779

Browse files
committed
Progress on #62 addressing only proper capitalization. Missing is sentence full stop.
1 parent 854a908 commit ad06779

File tree

5 files changed

+63
-5
lines changed

5 files changed

+63
-5
lines changed

TranslatorCpp/Languages/English.h

+8
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,12 @@ struct English : public ENGLISH_BASE
110110
wt == word_type::pronoun ||
111111
wt == verb;
112112
}
113+
114+
static bool should_capitalize(const translator::word_form<English> &w)
115+
{
116+
if (w.p_dw->wordtype == word_type::pronoun && w.word == "i")
117+
return true;
118+
119+
return false;
120+
}
113121
};

TranslatorCpp/Languages/Serbian.h

+5
Original file line numberDiff line numberDiff line change
@@ -153,4 +153,9 @@ struct Serbian : public SERBIAN_BASE
153153
wt == word_type::придев ||
154154
wt == word_type::прилог;
155155
}
156+
157+
static bool should_capitalize(const translator::word_form<Serbian> &w)
158+
{
159+
return false;
160+
}
156161
};

TranslatorCpp/Parse.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ int main(int argc, char *argv[])
6868
if (stLang == "SR")
6969
{
7070
map<int, wstring> sents;
71+
setlocale(LC_ALL, "");
7172
generate_random_sentences<Serbian>(sents, seed);
7273
set_wide();
7374
for (auto const &pair : sents)
@@ -126,4 +127,27 @@ int main(int argc, char *argv[])
126127

127128
cerr << "Unrecognized command" << endl;
128129
return -1;
130+
}
131+
132+
char translator::capitalize(char c)
133+
{
134+
return toupper(c);
135+
}
136+
137+
wchar_t translator::capitalize(wchar_t c)
138+
{
139+
wchar_t upper = towupper(c);
140+
return upper;
141+
}
142+
143+
void translator::to_lower(basic_string<char>& s)
144+
{
145+
for (basic_string<char>::iterator p = s.begin(); p != s.end(); ++p)
146+
*p = tolower(*p);
147+
}
148+
149+
void translator::to_lower(basic_string<wchar_t>& s)
150+
{
151+
for (basic_string<wchar_t>::iterator p = s.begin(); p != s.end(); ++p)
152+
*p = towlower(*p);
129153
}

TranslatorCpp/language.h

+8
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ namespace translator
6868
}
6969
}
7070

71+
void to_lower(basic_string<char>& s);
72+
73+
void to_lower(basic_string<wchar_t>& s);
74+
7175
template <typename Language, typename letter = Language::letter, typename string_t = Language::string_t>
7276
bool parse(typename Language::string_t s)
7377
{
@@ -81,6 +85,10 @@ namespace translator
8185

8286
parsing_triangle<std::vector<parsing_node<Language>>> pt(vs.size());
8387

88+
// Lowercase all the words
89+
for (auto &word : vs)
90+
to_lower(word);
91+
8492
// Lexical analysis
8593
for (unsigned int i = 0; i < vs.size(); i++)
8694
{

TranslatorCpp/random_sentence.h

+18-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,18 @@
55

66
namespace translator
77
{
8+
char capitalize(char c);
9+
10+
wchar_t capitalize(wchar_t c);
11+
12+
template<typename string_t>
13+
const string_t capitalize_string(const string_t& st)
14+
{
15+
string_t copy = st;
16+
copy[0] = capitalize(copy[0]);
17+
return copy;
18+
}
19+
820
template<typename Language>
921
const rule<Language>& get_random_rule(std::default_random_engine& device, typename Language::word_type wt = Language::Sentence)
1022
{
@@ -144,23 +156,24 @@ namespace translator
144156
}
145157
}
146158

147-
string_t ToString() const
159+
string_t ToString(bool first_word=false) const
148160
{
149161
switch (t)
150162
{
151163
case RNode::string:
152-
return st;
164+
return first_word ? capitalize_string(st) : st;
153165
case RNode::word:
154166
{
155167
const word_form<Language>& w = p_dw->find_word_form(am);
156-
return w.word;
168+
return first_word || Language::should_capitalize(w) ? capitalize_string(w.word) : w.word;
157169
}
158170
case RNode::node:
159171
{
160172
string_t stSum;
161173
for (auto &child : children)
162174
{
163-
stSum += child.ToString();
175+
stSum += child.ToString(first_word);
176+
first_word = false;
164177
stSum += string_t::value_type(' ');
165178
}
166179
return stSum.substr(0, stSum.size() - 1);
@@ -184,6 +197,6 @@ namespace translator
184197

185198
RNode<Language> node(r, device);
186199
node.consolidate_attributes(device);
187-
return node.ToString();
200+
return node.ToString(true);
188201
}
189202
}

0 commit comments

Comments
 (0)