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/extract.h>
31#include <fst/extensions/far/info.h>
32#include <fst/extensions/far/print-strings.h>
33#include <fst/extensions/far/far.h>
34
35#include <fst/types.h>
36
37namespace fst {
38namespace script {
39
40// Note: it is safe to pass these strings as references because
41// this struct is only used to pass them deeper in the call graph.
42// Be sure you understand why this is so before using this struct
43// for anything else!
44struct FarCompileStringsArgs {
45  const vector<string> &in_fnames;
46  const string &out_fname;
47  const string &fst_type;
48  const FarType &far_type;
49  const int32 generate_keys;
50  const FarEntryType fet;
51  const FarTokenType tt;
52  const string &symbols_fname;
53  const string &unknown_symbol;
54  const bool allow_negative_labels;
55  const bool file_list_input;
56  const string &key_prefix;
57  const string &key_suffix;
58
59  FarCompileStringsArgs(const vector<string> &in_fnames,
60                        const string &out_fname,
61                        const string &fst_type,
62                        const FarType &far_type,
63                        int32 generate_keys,
64                        FarEntryType fet,
65                        FarTokenType tt,
66                        const string &symbols_fname,
67                        const string &unknown_symbol,
68                        bool allow_negative_labels,
69                        bool file_list_input,
70                        const string &key_prefix,
71                        const string &key_suffix) :
72      in_fnames(in_fnames), out_fname(out_fname), fst_type(fst_type),
73      far_type(far_type), generate_keys(generate_keys), fet(fet),
74      tt(tt), symbols_fname(symbols_fname), unknown_symbol(unknown_symbol),
75      allow_negative_labels(allow_negative_labels),
76      file_list_input(file_list_input), key_prefix(key_prefix),
77      key_suffix(key_suffix) { }
78};
79
80template <class Arc>
81void FarCompileStrings(FarCompileStringsArgs *args) {
82  fst::FarCompileStrings<Arc>(
83      args->in_fnames, args->out_fname, args->fst_type, args->far_type,
84      args->generate_keys, args->fet, args->tt, args->symbols_fname,
85      args->unknown_symbol, args->allow_negative_labels, args->file_list_input,
86      args->key_prefix, args->key_suffix);
87}
88
89void FarCompileStrings(
90    const vector<string> &in_fnames,
91    const string &out_fname,
92    const string &arc_type,
93    const string &fst_type,
94    const FarType &far_type,
95    int32 generate_keys,
96    FarEntryType fet,
97    FarTokenType tt,
98    const string &symbols_fname,
99    const string &unknown_symbol,
100    bool allow_negative_labels,
101    bool file_list_input,
102    const string &key_prefix,
103    const string &key_suffix);
104
105
106// Note: it is safe to pass these strings as references because
107// this struct is only used to pass them deeper in the call graph.
108// Be sure you understand why this is so before using this struct
109// for anything else!
110struct FarCreateArgs {
111  const vector<string> &in_fnames;
112  const string &out_fname;
113  const int32 generate_keys;
114  const bool file_list_input;
115  const FarType &far_type;
116  const string &key_prefix;
117  const string &key_suffix;
118
119  FarCreateArgs(
120      const vector<string> &in_fnames, const string &out_fname,
121      const int32 generate_keys, const bool file_list_input,
122      const FarType &far_type, const string &key_prefix,
123      const string &key_suffix)
124      : in_fnames(in_fnames), out_fname(out_fname),
125        generate_keys(generate_keys), file_list_input(file_list_input),
126        far_type(far_type), key_prefix(key_prefix), key_suffix(key_suffix) { }
127};
128
129template<class Arc>
130void FarCreate(FarCreateArgs *args) {
131  fst::FarCreate<Arc>(args->in_fnames, args->out_fname, args->generate_keys,
132                          args->file_list_input, args->far_type,
133                          args->key_prefix, args->key_suffix);
134}
135
136void FarCreate(const vector<string> &in_fnames,
137               const string &out_fname,
138               const string &arc_type,
139               const int32 generate_keys,
140               const bool file_list_input,
141               const FarType &far_type,
142               const string &key_prefix,
143               const string &key_suffix);
144
145
146typedef args::Package<const vector<string> &, int32,
147                      const string&, const string&, const string&,
148                      const string&> FarExtractArgs;
149
150template<class Arc>
151void FarExtract(FarExtractArgs *args) {
152  fst::FarExtract<Arc>(
153      args->arg1, args->arg2, args->arg3, args->arg4, args->arg5, args->arg6);
154}
155
156void FarExtract(const vector<string> &ifilenames,
157                const string &arc_type,
158                int32 generate_filenames, const string &begin_key,
159                const string &end_key, const string &filename_prefix,
160                const string &filename_suffix);
161
162typedef args::Package<const vector<string> &, const string &,
163                      const string &, const bool> FarInfoArgs;
164
165template <class Arc>
166void FarInfo(FarInfoArgs *args) {
167  fst::FarInfo<Arc>(args->arg1, args->arg2, args->arg3, args->arg4);
168}
169
170void FarInfo(const vector<string> &filenames,
171             const string &arc_type,
172             const string &begin_key,
173             const string &end_key,
174             const bool list_fsts);
175
176struct FarPrintStringsArgs {
177  const vector<string> &ifilenames;
178  const FarEntryType entry_type;
179  const FarTokenType token_type;
180  const string &begin_key;
181  const string &end_key;
182  const bool print_key;
183  const string &symbols_fname;
184  const int32 generate_filenames;
185  const string &filename_prefix;
186  const string &filename_suffix;
187
188  FarPrintStringsArgs(
189      const vector<string> &ifilenames, const FarEntryType entry_type,
190      const FarTokenType token_type, const string &begin_key,
191      const string &end_key,  const bool print_key,
192      const string &symbols_fname, const int32 generate_filenames,
193      const string &filename_prefix, const string &filename_suffix) :
194      ifilenames(ifilenames), entry_type(entry_type), token_type(token_type),
195      begin_key(begin_key), end_key(end_key), print_key(print_key),
196      symbols_fname(symbols_fname),
197      generate_filenames(generate_filenames), filename_prefix(filename_prefix),
198      filename_suffix(filename_suffix) { }
199};
200
201template <class Arc>
202void FarPrintStrings(FarPrintStringsArgs *args) {
203  fst::FarPrintStrings<Arc>(
204      args->ifilenames, args->entry_type, args->token_type,
205      args->begin_key, args->end_key, args->print_key,
206      args->symbols_fname, args->generate_filenames, args->filename_prefix,
207      args->filename_suffix);
208}
209
210
211void FarPrintStrings(const vector<string> &ifilenames,
212                     const string &arc_type,
213                     const FarEntryType entry_type,
214                     const FarTokenType token_type,
215                     const string &begin_key,
216                     const string &end_key,
217                     const bool print_key,
218                     const string &symbols_fname,
219                     const int32 generate_filenames,
220                     const string &filename_prefix,
221                     const string &filename_suffix);
222
223}  // namespace script
224}  // namespace fst
225
226
227#define REGISTER_FST_FAR_OPERATIONS(ArcType)                            \
228  REGISTER_FST_OPERATION(FarCompileStrings, ArcType, FarCompileStringsArgs); \
229  REGISTER_FST_OPERATION(FarCreate, ArcType, FarCreateArgs);            \
230  REGISTER_FST_OPERATION(FarExtract, ArcType, FarExtractArgs);          \
231  REGISTER_FST_OPERATION(FarInfo, ArcType, FarInfoArgs);                \
232  REGISTER_FST_OPERATION(FarPrintStrings, ArcType, FarPrintStringsArgs)
233
234#endif  // FST_EXTENSIONS_FAR_FARSCRIPT_H_
235