summaryrefslogtreecommitdiffstats
path: root/src/storage/tag_utility.h
blob: 2e726cd6a49206c3f60c8832bcaf857d242702d9 (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
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* 
 *  libpinyin
 *  Library to deal with pinyin.
 *  
 *  Copyright (C) 2010 Peng Wu
 *  
 *  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/>.
 */

#ifndef TAG_UTILITY_H
#define TAG_UTILITY_H

#include "novel_types.h"

/* Note: the optional tag has been removed from the first implementation.
 * Maybe the optional tag will be added back later.
 */

namespace pinyin{

/**
 * taglib_init:
 * @returns: whether the initialize operation is successful.
 *
 * Initialize the n-gram tag parse library.
 *
 */
bool taglib_init();

/**
 * taglib_add_tag:
 * @line_type: the line type.
 * @line_tag: the line tag.
 * @num_of_values: the number of values following the line tag.
 * @required_tags: the required tags of the line.
 * @ignored_tags: the ignored tags of the line.
 * @returns: whether the add operation is successful.
 *
 * Add one line tag to the tag parse library.
 *
 * Note: the required and ignored tags are separated by ',' or ':' .
 *
 */
bool taglib_add_tag(int line_type, const char * line_tag, int num_of_values, const char * required_tags, const char * ignored_tags);

/**
 * taglib_read:
 * @input_line: one input line.
 * @line_type: the line type.
 * @values: the values following the line tag.
 * @required: the required tags of the line type.
 * @returns: whether the line is parsed ok.
 *
 * Parse one input line into line_type, values and required tags.
 *
 * Note: most parameters are hash table of string (const char *).
 *
 */
bool taglib_read(const char * input_line, int & line_type,
                 GPtrArray * values, GHashTable * required);

/**
 * taglib_remove_tag:
 * @line_type: the type of the line tag.
 * @returns: whether the remove operation is successful.
 *
 * Remove one line tag.
 *
 */
bool taglib_remove_tag(int line_type);

/**
 * taglib_push_state:
 * @returns: whether the push operation is successful.
 *
 * Push the current state onto the stack.
 *
 * Note: the taglib_push/pop_state functions are used to save
 * the current known tag list in stack.
 * Used when the parsing context is changed.
 */
bool taglib_push_state();

/**
 * taglib_pop_state:
 * @returns: whether the pop operation is successful.
 *
 * Pop the current state off the stack.
 *
 */
bool taglib_pop_state();

/**
 * taglib_fini:
 * @returns: whether the finish operation is successful.
 *
 * Finish the n-gram tag parse library.
 *
 */
bool taglib_fini();


class FacadePhraseIndex;


/**
 * taglib_token_to_string:
 * @phrase_index: the phrase index for phrase string lookup.
 * @token: the phrase token.
 * @returns: the phrase string found in phrase index.
 *
 * Translate one token into the phrase string.
 *
 */
char * taglib_token_to_string(FacadePhraseIndex * phrase_index,
                              phrase_token_t token);

/**
 * taglib_validate_token_with_string:
 * @phrase_index: the phrase index.
 * @token: the phrase token.
 * @string: the phrase string.
 * @returns: whether the token is validated with the phrase string.
 *
 * Validate the token with the phrase string.
 *
 */
bool taglib_validate_token_with_string(FacadePhraseIndex * phrase_index,
                                       phrase_token_t token,
                                       const char * string);

/* Note: the following function is only available when the optional tag exists.
   bool taglib_report_status(int line_type); */

/* Note: taglib_write is omited, as printf is more suitable for this. */

};

#endif