added: two tables to locales/substitute: smallleters, capitalics
added: locale.ToSmall(wchar_t), locale.ToCapital(wchar_t)
now we are able to recognize other than ASCII characters
added: static/basic/winix.css with basic styles
removed: [include "item_options.html"] from html templates (fun_cat.html and others)
git-svn-id: svn://ttmath.org/publicrep/winix/trunk@760 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* This file is a part of Winix
|
||||
* and is not publicly distributed
|
||||
*
|
||||
* Copyright (c) 2008-2010, Tomasz Sowa
|
||||
* Copyright (c) 2008-2011, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
@@ -36,12 +36,7 @@ void fil_capitalize(Info & i)
|
||||
const std::wstring & str = i.in.Str();
|
||||
|
||||
for(size_t a=0 ; a<str.size() ; ++a)
|
||||
{
|
||||
if( str[a]>='a' && str[a]<='z' )
|
||||
i.out << R(wchar_t(str[a] - 'a' + 'A'));
|
||||
else
|
||||
i.out << R(str[a]);
|
||||
}
|
||||
i.out << R(locale.ToCapital(str[a]));
|
||||
}
|
||||
|
||||
|
||||
@@ -50,12 +45,7 @@ void fil_tosmall(Info & i)
|
||||
const std::wstring & str = i.in.Str();
|
||||
|
||||
for(size_t a=0 ; a<str.size() ; ++a)
|
||||
{
|
||||
if( str[a]>='A' && str[a]<='Z' )
|
||||
i.out << R(wchar_t(str[a] - 'A' + 'a'));
|
||||
else
|
||||
i.out << R(str[a]);
|
||||
}
|
||||
i.out << R(locale.ToSmall(str[a]));
|
||||
}
|
||||
|
||||
|
||||
@@ -72,10 +62,7 @@ void fil_firstup(Info & i)
|
||||
if( str[a]!=' ' && str[a]!='\t' && str[a]!=13 && str[a]!=10 && str[a]!=160 )
|
||||
was_dot = false;
|
||||
|
||||
if( str[a]>='a' && str[a]<='z' )
|
||||
i.out << R(wchar_t(str[a] - 'a' + 'A'));
|
||||
else
|
||||
i.out << R(str[a]);
|
||||
i.out << R(locale.ToCapital(str[a]));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <algorithm>
|
||||
#include "locale.h"
|
||||
#include "core/log.h"
|
||||
#include "utf8.h"
|
||||
@@ -102,8 +103,9 @@ void Locale::ReadSubstTable(const char * dir, const char * dir_def)
|
||||
{
|
||||
bool read = false;
|
||||
|
||||
subst_original.clear();
|
||||
subst_changeto.clear();
|
||||
subst_url.clear();
|
||||
subst_smalllet.clear();
|
||||
subst_capitallet.clear();
|
||||
|
||||
if( dir_def && ReadSubstTable(dir_def) )
|
||||
read = true;
|
||||
@@ -130,8 +132,10 @@ bool read = false;
|
||||
if( loc_parser.Parse(file_name) == ConfParser::ok )
|
||||
{
|
||||
read = true;
|
||||
subst_original = loc_parser.table_single[L"original"];
|
||||
subst_changeto = loc_parser.table_single[L"changeto"];
|
||||
CreateSubstVector(subst_url, loc_parser.table_single[L"url_original"], loc_parser.table_single[L"url_changeto"]);
|
||||
CreateSubstVector(subst_smalllet, loc_parser.table_single[L"smallleters"], loc_parser.table_single[L"capitalics"]);
|
||||
CreateSubstVector(subst_capitallet, loc_parser.table_single[L"capitalics"], loc_parser.table_single[L"smallleters"]);
|
||||
|
||||
log << log3 << "Locale: read characters substitution tables from: " << file_name << logend;
|
||||
}
|
||||
|
||||
@@ -139,6 +143,28 @@ return read;
|
||||
}
|
||||
|
||||
|
||||
void Locale::CreateSubstVector(std::vector<SubstItem> & vect, const std::wstring & tab1, const std::wstring & tab2)
|
||||
{
|
||||
size_t i, min_size = (tab1.size() < tab2.size()) ? tab1.size() : tab2.size();
|
||||
SubstItem s;
|
||||
|
||||
vect.clear();
|
||||
|
||||
if( min_size == 0 )
|
||||
return;
|
||||
|
||||
vect.reserve(min_size);
|
||||
|
||||
for(i=0 ; i<min_size ; ++i)
|
||||
{
|
||||
s.from = tab1[i];
|
||||
s.to = tab2[i];
|
||||
vect.push_back(s);
|
||||
}
|
||||
|
||||
std::sort(vect.begin(), vect.end());
|
||||
}
|
||||
|
||||
|
||||
void Locale::Read(const char * dir, const char * dir_def)
|
||||
{
|
||||
@@ -149,9 +175,6 @@ void Locale::Read(const char * dir, const char * dir_def)
|
||||
}
|
||||
|
||||
ReadSubstTable(dir, dir_def);
|
||||
|
||||
if( subst_original.size() != subst_changeto.size() )
|
||||
log << log1 << "Locale: substitution tables have different sizes" << logend;
|
||||
}
|
||||
|
||||
|
||||
@@ -431,20 +454,94 @@ void Locale::UTF8(bool utf)
|
||||
}
|
||||
|
||||
|
||||
wchar_t Locale::Subst(wchar_t c)
|
||||
/*
|
||||
binary search in vect
|
||||
vect should be sorted by 'from'
|
||||
|
||||
if the 'val' is found in vect[].from then vect[].to is reterned
|
||||
else 'val' is returned
|
||||
*/
|
||||
wchar_t Locale::SubstFind(const std::vector<SubstItem> & vect, wchar_t val)
|
||||
{
|
||||
size_t i = subst_original.find(c);
|
||||
if( vect.empty() )
|
||||
return val;
|
||||
|
||||
if( i == std::wstring::npos || i >= subst_changeto.size() )
|
||||
return c;
|
||||
size_t o1 = 0;
|
||||
size_t o2 = vect.size() - 1;
|
||||
|
||||
return subst_changeto[i];
|
||||
if( val < vect[o1].from )
|
||||
return val;
|
||||
|
||||
if( val == vect[o1].from )
|
||||
return vect[o1].to;
|
||||
|
||||
if( val > vect[o2].from )
|
||||
return val;
|
||||
|
||||
if( val == vect[o2].from )
|
||||
return vect[o2].to;
|
||||
|
||||
while( o1 + 1 < o2 )
|
||||
{
|
||||
size_t o = (o1 + o2) / 2;
|
||||
|
||||
if( val == vect[o].from )
|
||||
return vect[o].to;
|
||||
|
||||
if( val < vect[o].from )
|
||||
o2 = o;
|
||||
else
|
||||
o1 = o;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Locale::Subst(std::wstring & str)
|
||||
|
||||
wchar_t Locale::UrlSubst(wchar_t c)
|
||||
{
|
||||
return SubstFind(subst_url, c);
|
||||
}
|
||||
|
||||
|
||||
void Locale::UrlSubst(std::wstring & str)
|
||||
{
|
||||
for(size_t i=0 ; i<str.size() ; ++i)
|
||||
str[i] = Subst(str[i]);
|
||||
str[i] = UrlSubst(str[i]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
wchar_t Locale::ToSmall(wchar_t c)
|
||||
{
|
||||
if( c>='A' && c<='Z' )
|
||||
return c - 'A' + 'a';
|
||||
|
||||
return SubstFind(subst_capitallet, c);
|
||||
}
|
||||
|
||||
|
||||
void Locale::ToSmall(std::wstring & str)
|
||||
{
|
||||
for(size_t i=0 ; i<str.size() ; ++i)
|
||||
str[i] = ToSmall(str[i]);
|
||||
}
|
||||
|
||||
|
||||
wchar_t Locale::ToCapital(wchar_t c)
|
||||
{
|
||||
if( c>='a' && c<='z' )
|
||||
return c - 'a' + 'A';
|
||||
|
||||
return SubstFind(subst_smalllet, c);
|
||||
}
|
||||
|
||||
|
||||
void Locale::ToCapital(std::wstring & str)
|
||||
{
|
||||
for(size_t i=0 ; i<str.size() ; ++i)
|
||||
str[i] = ToCapital(str[i]);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,19 +89,32 @@ public:
|
||||
// default: false
|
||||
void UTF8(bool utf);
|
||||
|
||||
// substitution characters
|
||||
// !! w przyszlosci bedzie zmiana nazw tych metod i bedzie ich wiecej
|
||||
// !! bedzie zmiana do url, do wielkosci liter (male/duze) i moze inne
|
||||
wchar_t Subst(wchar_t c);
|
||||
void Subst(std::wstring & str);
|
||||
// url substitution characters
|
||||
wchar_t UrlSubst(wchar_t c);
|
||||
void UrlSubst(std::wstring & str);
|
||||
|
||||
// changing to small/capital letters
|
||||
wchar_t ToSmall(wchar_t c);
|
||||
void ToSmall(std::wstring & str);
|
||||
wchar_t ToCapital(wchar_t c);
|
||||
void ToCapital(std::wstring & str);
|
||||
|
||||
private:
|
||||
|
||||
// struct to used for substitution
|
||||
struct SubstItem
|
||||
{
|
||||
wchar_t from, to;
|
||||
bool operator<(const SubstItem & arg) const { return from < arg.from; }
|
||||
};
|
||||
|
||||
void AddLocale(size_t lang);
|
||||
void ReadFile(const char * dir, const char * dir_def, size_t lang, const char * file);
|
||||
bool ReadFile(const char * dir, size_t lang, const char * file);
|
||||
void ReadSubstTable(const char * dir, const char * dir_def);
|
||||
bool ReadSubstTable(const char * dir);
|
||||
void CreateSubstVector(std::vector<SubstItem> & vect, const std::wstring & tab1, const std::wstring & tab2);
|
||||
wchar_t SubstFind(const std::vector<SubstItem> & vect, wchar_t val);
|
||||
|
||||
// locale files
|
||||
// we have at least one item "en"
|
||||
@@ -115,9 +128,10 @@ private:
|
||||
// this table has the same size as locale_files (at least one item)
|
||||
std::vector<ConfParser::Table> loc_tab_multi;
|
||||
|
||||
// these tables are used to change url characters
|
||||
std::wstring subst_original;
|
||||
std::wstring subst_changeto;
|
||||
// vectors of characters substitution (sort by 'from')
|
||||
std::vector<SubstItem> subst_url;
|
||||
std::vector<SubstItem> subst_smalllet; // changing from small to capital
|
||||
std::vector<SubstItem> subst_capitallet; // changing from capital to small
|
||||
|
||||
|
||||
ConfParser loc_parser;
|
||||
|
||||
Reference in New Issue
Block a user