File: patternmanager.h

package info (click to toggle)
subtitleeditor 0.33.0-3
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 7,300 kB
  • ctags: 2,839
  • sloc: cpp: 23,921; sh: 10,300; makefile: 1,248; perl: 434; xml: 89
file content (128 lines) | stat: -rw-r--r-- 3,328 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#ifndef _patternmanager_h
#define _patternmanager_h

/*
 *	subtitleeditor -- a tool to create or edit subtitle
 *
 *	http://home.gna.org/subtitleeditor/
 *	https://gna.org/projects/subtitleeditor/
 *
 *	Copyright @ 2005-2009, kitone
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 3 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#include <libxml++/libxml++.h>
#include <vector>
#include "pattern.h"

/*
 *
 */
class PatternManager
{
public:

	/*
	 * Read and create all patterns as type from the install directory 
	 * and the user profile directory.
	 * 
	 * type: 'common-error', 'hearing-impaired'
	 */
	PatternManager(const Glib::ustring &type);

	/*
	 * Delete patterns.
	 */
	~PatternManager();

	/*
	 * Return all scripts available. (Zyyy is skipped)
	 */
	std::vector<Glib::ustring> get_scripts();

	/*
	 * Return all languages available for the script code.
	 */
	std::vector<Glib::ustring> get_languages(
			const Glib::ustring &script);

	/*
	 * Return all countries available for the script and language codes.
	 */
	std::vector<Glib::ustring> get_countries(
			const Glib::ustring &script, 
			const Glib::ustring &language);

	/*
	 * Return a list of patterns available from the codes.
	 */
	std::list<Pattern*> get_patterns(
			const Glib::ustring &script = Glib::ustring(), 
			const Glib::ustring &language = Glib::ustring(), 
			const Glib::ustring &country = Glib::ustring());

	/*
	 * Enable or disable the patterns from his name. 
	 * The configuration is update with the new state.
	 *
	 * It's managed in this class because a multiple pattern can be have a same name.
	 */
	void set_active(const Glib::ustring &name, bool state);

	/*
	 * Return the state of the pattern from his name.
	 */
	bool get_active(const Glib::ustring &name);

protected:

	/*
	 * Load patterns in the directory.
	 */
	void load_path(const Glib::ustring &path);

	/*
	 * Load a pattern from a file.
	 */
	void load_pattern(const Glib::ustring &path, const Glib::ustring &filename);

	/*
	 * Read, create and return a pattern from xml element.
	 */
	Pattern* read_pattern(const xmlpp::Element *xml_pattern);

	/*
	 * The patterns need to be filtered to respect the Replace policy
	 * Maintain order of patterns with the same name
	 */
	std::list<Pattern*> filter_patterns(std::list<Pattern*> &list);

	/*
	 * Return all codes needs to be used from args.
	 * 'Zyyy', 'script', 'script-language' and 'script-language-country'.
	 *
	 * Zyyy is the first and it is always added.
	 */
	std::vector<Glib::ustring> get_codes(
			const Glib::ustring &script = Glib::ustring(), 
			const Glib::ustring &language = Glib::ustring(), 
			const Glib::ustring &country = Glib::ustring());

protected:
	Glib::ustring m_type;
	std::list<Pattern*> m_patterns;
};

#endif//_patternmanager_h