#include <dpl/log/log.h>
#include <dpl/db/orm.h>
#include <dpl/string.h>
-#include <dpl/wrt-dao-ro/global_dao_read_only.h>
+#include <dpl/scope_guard.h>
+#include <wrt-commons/i18n-dao-ro/i18n_dao_read_only.h>
+#include <wrt-commons/i18n-dao-ro/i18n_database.h>
#include <iterator>
#include <vector>
#include <ctype.h>
#include <dpl/singleton_impl.h>
IMPLEMENT_SINGLETON(LanguageSubtagRstTree)
+namespace I18nDAOReadOnly = I18n::DB::I18nDAOReadOnly;
+
bool LanguageSubtagRstTree::ValidateLanguageTag(const std::string &tag_input)
{
std::string tag = tag_input;
std::back_inserter(parts),
false);
std::vector<DPL::String>::iterator token = parts.begin();
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return false;
}
- if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token,
- RECORD_TYPE_LANGUAGE))
+
+ I18n::DB::Interface::attachDatabaseRO();
+ DPL_SCOPE_EXIT()
+ {
+ I18n::DB::Interface::detachDatabase();
+ };
+
+ if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_LANGUAGE))
{
++token;
- } else {
+ }
+ else
+ {
return false;
}
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_EXTLANG)) {
+
+ if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_EXTLANG))
+ {
++token;
}
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_SCRIPT)) {
+
+ if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_SCRIPT))
+ {
++token;
}
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_REGION)) {
+
+ if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_REGION))
+ {
++token;
}
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- while (token != parts.end()) {
- if (WrtDB::GlobalDAOReadOnly::IsValidSubTag(
- *token, RECORD_TYPE_VARIANT))
+
+ while (token != parts.end())
+ {
+ if (I18nDAOReadOnly::IsValidSubTag(*token, RECORD_TYPE_VARIANT))
{
++token;
- } else {
+ }
+ else
+ {
break;
}
}
//'u' - unicode extension - only one BCP47 extension is registered.
//TODO: unicode extension should be also validated (l.wrzosek)
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- if (*token == L"u") {
+
+ if (*token == L"u")
+ {
++token;
bool one_or_more = false;
while (token != parts.end() &&
one_or_more = true;
++token;
}
- if (!one_or_more) {
+ if (!one_or_more)
+ {
return false;
}
}
//'x' - privateuse
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
- if (*token == L"x") {
+
+ if (*token == L"x")
+ {
++token;
bool one_or_more = false;
while (token != parts.end() &&
one_or_more = true;
++token;
}
- if (!one_or_more) {
+ if (!one_or_more)
+ {
return false;
}
}
- if (token == parts.end()) {
+ if (token == parts.end())
+ {
return true;
}
//Try private use now:
token = parts.begin();
- if (*token == L"x") {
+ if (*token == L"x")
+ {
++token;
bool one_or_more = false;
while (token != parts.end() &&