aboutsummaryrefslogtreecommitdiff
path: root/src/generator.h
blob: 554e7edcf003f111503ec02e704ce45adae852f2 (plain)
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
/*
 * generator.h: dictionary generator
 *
 * Nothing fancy.  Just something moved out off the `stardict' test to be
 * conveniently reused by the included tools.
 *
 * Copyright (c) 2013, Přemysl Eric Janouch <p@janouch.name>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */

#ifndef GENERATOR_H
#define GENERATOR_H

/// Simplifies the task of creating a StarDict dictionary.
typedef struct generator               Generator;

struct generator
{
	StardictInfo       * info;         ///< Dictionary information, fill it in

	goffset              entry_mark;   ///< Marks the entry's start offset

	GFileOutputStream  * dict_stream;  ///< Dictionary stream
	GDataOutputStream  * dict_data;    ///< Dictionary data stream wrapper

	GFileOutputStream  * idx_stream;   ///< Index file stream
	GDataOutputStream  * idx_data;     ///< Index file data stream wrapper
};

Generator *generator_new (const gchar *base, GError **error);
gboolean generator_finish (Generator *self, GError **error);
void generator_free (Generator *self);

void generator_begin_entry (Generator *self);
gboolean generator_write_type (Generator *self, gchar type, GError **error);
gboolean generator_write_raw (Generator *self,
	gpointer data, gsize data_size, gboolean mark_end, GError **error);
gboolean generator_write_string (Generator *self,
	const gchar *s, gboolean mark_end, GError **error);
gboolean generator_finish_entry (Generator *self,
	const gchar *word, GError **error);

#endif  // ! GENERATOR_H