farscript.h revision 5b6dc79427b8f7eeb6a7ff68034ab8548ce670ea
1
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6//     http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13//
14// Copyright 2005-2010 Google, Inc.
15// Author: jpr@google.com (Jake Ratkiewicz)
16
17// Convenience file for including all of the FAR operations,
18// or registering them for new arc types.
19
20#ifndef FST_EXTENSIONS_FAR_FARSCRIPT_H_
21#define FST_EXTENSIONS_FAR_FARSCRIPT_H_
22
23#include <vector>
24using std::vector;
25#include <string>
26
27#include <fst/script/arg-packs.h>
28#include <fst/extensions/far/compile-strings.h>
29#include <fst/extensions/far/create.h>
30#include <fst/extensions/far/equal.h>
31#include <fst/extensions/far/extract.h>
32#include <fst/extensions/far/info.h>
33#include <fst/extensions/far/print-strings.h>
34#include <fst/extensions/far/far.h>
35
36#include <fst/types.h>
37
38namespace fst {
39namespace script {
40
41// Note: it is safe to pass these strings as references because
42// this struct is only used to pass them deeper in the call graph.
43// Be sure you understand why this is so before using this struct
44// for anything else!
45struct FarCompileStringsArgs {
46  const vector<string> &in_fnames;
47  const string &out_fname;
48  const string &fst_type;
49  const FarType &far_type;
50  const int32 generate_keys;
51  const FarEntryType fet;
52  const FarTokenType tt;
53  const string &symbols_fname;
54  const string &unknown_symbol;
55  const bool keep_symbols;
56  const bool initial_symbols;
57  const bool allow_negative_labels;
58  const bool file_list_input;
59  const string &key_prefix;
60  const string &key_suffix;
61
62  FarCompileStringsArgs(const vector<string> &in_fnames,
63                        const string &out_fname,
64                        const string &fst_type,
65                        const FarType &far_type,
66                        int32 generate_keys,
67                        FarEntryType fet,
68                        FarTokenType tt,
69                        const string &symbols_fname,
70                        const string &unknown_symbol,
71                        bool keep_symbols,
72                        bool initial_symbols,
73                        bool allow_negative_labels,
74                        bool file_list_input,
75                        const string &key_prefix,
76                        const string &key_suffix) :
77      in_fnames(in_fnames), out_fname(out_fname), fst_type(fst_type),
78      far_type(far_type), generate_keys(generate_keys), fet(fet),
79      tt(tt), symbols_fname(symbols_fname), unknown_symbol(unknown_symbol),
80      keep_symbols(keep_symbols), initial_symbols(initial_symbols),
81      allow_negative_labels(allow_negative_labels),
82      file_list_input(file_list_input), key_prefix(key_prefix),
83      key_suffix(key_suffix) { }
84};
85
86template <class Arc>
87void FarCompileStrings(FarCompileStringsArgs *args) {
88  fst::FarCompileStrings<Arc>(
89      args->in_fnames, args->out_fname, args->fst_type, args->far_type,
90      args->generate_keys, args->fet, args->tt, args->symbols_fname,
91      args->unknown_symbol, args->keep_symbols, args->initial_symbols,
92      args->allow_negative_labels, args->file_list_input,
93      args->key_prefix, args->key_suffix);
94}
95
96void FarCompileStrings(
97    const vector<string> &in_fnames,
98    const string &out_fname,
99    const string &arc_type,
100    const string &fst_type,
101    const FarType &far_type,
102    int32 generate_keys,
103    FarEntryType fet,
104    FarTokenType tt,
105    const string &symbols_fname,
106    const string &unknown_symbol,
107    bool keep_symbols,
108    bool initial_symbols,
109    bool allow_negative_labels,
110    bool file_list_input,
111    const string &key_prefix,
112    const string &key_suffix);
113
114
115// Note: it is safe to pass these strings as references because
116// this struct is only used to pass them deeper in the call graph.
117// Be sure you understand why this is so before using this struct
118// for anything else!
119struct FarCreateArgs {
120  const vector<string> &in_fnames;
121  const string &out_fname;
122  const int32 generate_keys;
123  const bool file_list_input;
124  const FarType &far_type;
125  const string &key_prefix;
126  const string &key_suffix;
127
128  FarCreateArgs(
129      const vector<string> &in_fnames, const string &out_fname,
130      const int32 generate_keys, const bool file_list_input,
131      const FarType &far_type, const string &key_prefix,
132      const string &key_suffix)
133      : in_fnames(in_fnames), out_fname(out_fname),
134        generate_keys(generate_keys), file_list_input(file_list_input),
135        far_type(far_type), key_prefix(key_prefix), key_suffix(key_suffix) { }
136};
137
138template<class Arc>
139void FarCreate(FarCreateArgs *args) {
140  fst::FarCreate<Arc>(args->in_fnames, args->out_fname, args->generate_keys,
141                          args->file_list_input, args->far_type,
142                          args->key_prefix, args->key_suffix);
143}
144
145void FarCreate(const vector<string> &in_fnames,
146               const string &out_fname,
147               const string &arc_type,
148               const int32 generate_keys,
149               const bool file_list_input,
150               const FarType &far_type,
151               const string &key_prefix,
152               const string &key_suffix);
153
154
155typedef args::Package<const string &, const string &, float,
156                      const string &, const string &> FarEqualInnerArgs;
157typedef args::WithReturnValue<bool, FarEqualInnerArgs> FarEqualArgs;
158
159template <class Arc>
160void FarEqual(FarEqualArgs *args) {
161  args->retval = fst::FarEqual<Arc>(
162      args->args.arg1, args->args.arg2, args->args.arg3,
163      args->args.arg4, args->args.arg5);
164}
165
166bool FarEqual(const string &filename1,
167              const string &filename2,
168              const string &arc_type,
169              float delta = kDelta,
170              const string &begin_key = string(),
171              const string &end_key = string());
172
173
174typedef args::Package<const vector<string> &, int32,
175                      const string&, const string&, const string&,
176                      const string&, const string&> FarExtractArgs;
177
178template<class Arc>
179void FarExtract(FarExtractArgs *args) {
180  fst::FarExtract<Arc>(
181      args->arg1, args->arg2, args->arg3, args->arg4, args->arg5, args->arg6,
182      args->arg7);
183}
184
185void FarExtract(const vector<string> &ifilenames,
186                const string &arc_type,
187                int32 generate_filenames,
188                const string &keys,
189                const string &key_separator,
190                const string &range_delimiter,
191                const string &filename_prefix,
192                const string &filename_suffix);
193
194typedef args::Package<const vector<string> &, const string &,
195                      const string &, const bool> FarInfoArgs;
196
197template <class Arc>
198void FarInfo(FarInfoArgs *args) {
199  fst::FarInfo<Arc>(args->arg1, args->arg2, args->arg3, args->arg4);
200}
201
202void FarInfo(const vector<string> &filenames,
203             const string &arc_type,
204             const string &begin_key,
205             const string &end_key,
206             const bool list_fsts);
207
208struct FarPrintStringsArgs {
209  const vector<string> &ifilenames;
210  const FarEntryType entry_type;
211  const FarTokenType token_type;
212  const string &begin_key;
213  const string &end_key;
214  const bool print_key;
215  const bool print_weight;
216  const string &symbols_fname;
217  const bool initial_symbols;
218  const int32 generate_filenames;
219  const string &filename_prefix;
220  const string &filename_suffix;
221
222  FarPrintStringsArgs(
223      const vector<string> &ifilenames, const FarEntryType entry_type,
224      const FarTokenType token_type, const string &begin_key,
225      const string &end_key,  const bool print_key, const bool print_weight,
226      const string &symbols_fname, const bool initial_symbols,
227      const int32 generate_filenames,
228      const string &filename_prefix, const string &filename_suffix) :
229      ifilenames(ifilenames), entry_type(entry_type), token_type(token_type),
230      begin_key(begin_key), end_key(end_key),
231      print_key(print_key), print_weight(print_weight),
232      symbols_fname(symbols_fname), initial_symbols(initial_symbols),
233      generate_filenames(generate_filenames), filename_prefix(filename_prefix),
234      filename_suffix(filename_suffix) { }
235};
236
237template <class Arc>
238void FarPrintStrings(FarPrintStringsArgs *args) {
239  fst::FarPrintStrings<Arc>(
240      args->ifilenames, args->entry_type, args->token_type,
241      args->begin_key, args->end_key, args->print_key, args->print_weight,
242      args->symbols_fname, args->initial_symbols, args->generate_filenames,
243      args->filename_prefix, args->filename_suffix);
244}
245
246
247void FarPrintStrings(const vector<string> &ifilenames,
248                     const string &arc_type,
249                     const FarEntryType entry_type,
250                     const FarTokenType token_type,
251                     const string &begin_key,
252                     const string &end_key,
253                     const bool print_key,
254                     const bool print_weight,
255                     const string &symbols_fname,
256                     const bool initial_symbols,
257                     const int32 generate_filenames,
258                     const string &filename_prefix,
259                     const string &filename_suffix);
260
261}  // namespace script
262}  // namespace fst
263
264
265#define REGISTER_FST_FAR_OPERATIONS(ArcType)                            \
266  REGISTER_FST_OPERATION(FarCompileStrings, ArcType, FarCompileStringsArgs); \
267  REGISTER_FST_OPERATION(FarCreate, ArcType, FarCreateArgs);            \
268  REGISTER_FST_OPERATION(FarEqual, ArcType, FarEqualArgs);              \
269  REGISTER_FST_OPERATION(FarExtract, ArcType, FarExtractArgs);          \
270  REGISTER_FST_OPERATION(FarInfo, ArcType, FarInfoArgs);                \
271  REGISTER_FST_OPERATION(FarPrintStrings, ArcType, FarPrintStringsArgs)
272
273#endif  // FST_EXTENSIONS_FAR_FARSCRIPT_H_
274