Files
winix/templates/patterns.h
Tomasz Sowa b8ff5d4cfc added: winix functions: locale, timezone
changed: time zones -- now we have the daylight saving time
       different for each year (start, end)
added: config option: time_zone_id (size_t)
       time zone identifier for not logged users
       or for newly created accounts
       those identifiers you can see in etc/time_zones.conf file
       or by using timezone winix function with 'a' parameter (timezone/a) (!!IMPROVE ME NOT IMPLEMENTED YET)
       default: 34 (Coordinated Universal Time UTC+00:00)
added: config option: locale_default_id (size_t)
       locale for not logged users
       or for newly created accounts
added: config option: locale_max_id (size_t)
       a maximum value of a locale identifier
       default: 100 (maximum: 1000)
       each locale files should have its own identifier (in "winix_locale_id" field)
       from zero to this value
added: config option: time_zone_max_id (size_t)
       maximum value of a time zone identifier
       time zones with an id greater than this will be skipped
       default: 130 (maximum: 1000)
removed: config option: locale_default



git-svn-id: svn://ttmath.org/publicrep/winix/trunk@852 e52654a7-88a9-db11-a3e9-0013d4bc506e
2012-06-26 23:19:19 +00:00

130 lines
2.7 KiB
C++
Executable File

/*
* This file is a part of Winix
* and is not publicly distributed
*
* Copyright (c) 2011-2012, Tomasz Sowa
* All rights reserved.
*
*/
#ifndef headerfile_winix_templates_patterns
#define headerfile_winix_templates_patterns
#include <vector>
#include "locale.h"
#include "localefilter.h"
#include "misc.h"
class Patterns
{
public:
Patterns();
void SetUTF8(bool _utf8);
void SetDeleteWhiteItems(bool del_white);
void SetDirectories(const std::wstring & tmpl_dir, const std::wstring & tmpl_dir_def);
/*
setting locale and locale_filter
this method should always be called on the beginning
*/
void SetLocale(Locale * plocale);
void SetLocaleFilter(LocaleFilter * plocale_filter);
/*
setting ezc functions
you don't have to call this method
(in such a case functions will be search with O(log) by the Generator)
*/
void SetEzcFunctions(TemplatesFunctions::EzcFun * fun);
/*
adding a new pattern and returning its index
if the pattern already exists the method returns its index only
and increment internal reference counter for such pattern
if read_pattern is false then the pattern is not read,
it will be read when you call Reload() method
*/
size_t Add(const wchar_t * file_name, bool read_pattern = true);
size_t Add(const std::wstring & file_name, bool read_pattern = true);
/*
returning a pattern (if exists)
if the pattern does not exist return a null pointer
*/
Ezc::Pattern * Get(size_t index, size_t lang_id);
/*
returning a file name of a pattern
or an empty string if the pattern does not exist
*/
const std::wstring & GetFileName(size_t index);
/*
deleting all patterns
*/
void Clear();
/*
decrementing internal reference counter and if zero then deletes the pattern
*/
void Erase(size_t index);
/*
reloading all patterns
*/
void Reload();
/*
returning how many patterns do we have
remember that we have one pattern for each language
so the real number of patterns is: locale->Size() * Size()
*/
size_t Size();
private:
bool utf8;
bool del_white_items;
std::wstring templates_dir, templates_dir_def;
Locale * locale;
LocaleFilter * locale_filter;
// can be null (not set directly)
TemplatesFunctions::EzcFun * ezc_fun;
struct Template
{
bool to_delete;
std::wstring file_name;
size_t references; // starts from 1 (zero means the pattern was deleted)
// (we do not delete the Template immediately because
// indices would be invalidated)
std::vector<Ezc::Pattern> patterns; // table[through lang index]
};
typedef std::vector<Template> PatTab;
PatTab pat_tab;
Template template_temp;
// non-const for default assignment operator to be created
std::wstring empty_str;
void ReadPatterns(Template & templ);
};
#endif