// Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Copyright 2005-2010 Google, Inc. // Author: jpr@google.com (Jake Ratkiewicz) // Convenience file for including all of the FAR operations, // or registering them for new arc types. #ifndef FST_EXTENSIONS_FAR_FARSCRIPT_H_ #define FST_EXTENSIONS_FAR_FARSCRIPT_H_ #include <vector> using std::vector; #include <string> #include <fst/script/arg-packs.h> #include <fst/extensions/far/compile-strings.h> #include <fst/extensions/far/create.h> #include <fst/extensions/far/extract.h> #include <fst/extensions/far/info.h> #include <fst/extensions/far/print-strings.h> #include <fst/extensions/far/far.h> #include <fst/types.h> namespace fst { namespace script { // Note: it is safe to pass these strings as references because // this struct is only used to pass them deeper in the call graph. // Be sure you understand why this is so before using this struct // for anything else! struct FarCompileStringsArgs { const vector<string> &in_fnames; const string &out_fname; const string &fst_type; const FarType &far_type; const int32 generate_keys; const FarEntryType fet; const FarTokenType tt; const string &symbols_fname; const string &unknown_symbol; const bool allow_negative_labels; const bool file_list_input; const string &key_prefix; const string &key_suffix; FarCompileStringsArgs(const vector<string> &in_fnames, const string &out_fname, const string &fst_type, const FarType &far_type, int32 generate_keys, FarEntryType fet, FarTokenType tt, const string &symbols_fname, const string &unknown_symbol, bool allow_negative_labels, bool file_list_input, const string &key_prefix, const string &key_suffix) : in_fnames(in_fnames), out_fname(out_fname), fst_type(fst_type), far_type(far_type), generate_keys(generate_keys), fet(fet), tt(tt), symbols_fname(symbols_fname), unknown_symbol(unknown_symbol), allow_negative_labels(allow_negative_labels), file_list_input(file_list_input), key_prefix(key_prefix), key_suffix(key_suffix) { } }; template <class Arc> void FarCompileStrings(FarCompileStringsArgs *args) { fst::FarCompileStrings<Arc>( args->in_fnames, args->out_fname, args->fst_type, args->far_type, args->generate_keys, args->fet, args->tt, args->symbols_fname, args->unknown_symbol, args->allow_negative_labels, args->file_list_input, args->key_prefix, args->key_suffix); } void FarCompileStrings( const vector<string> &in_fnames, const string &out_fname, const string &arc_type, const string &fst_type, const FarType &far_type, int32 generate_keys, FarEntryType fet, FarTokenType tt, const string &symbols_fname, const string &unknown_symbol, bool allow_negative_labels, bool file_list_input, const string &key_prefix, const string &key_suffix); // Note: it is safe to pass these strings as references because // this struct is only used to pass them deeper in the call graph. // Be sure you understand why this is so before using this struct // for anything else! struct FarCreateArgs { const vector<string> &in_fnames; const string &out_fname; const int32 generate_keys; const bool file_list_input; const FarType &far_type; const string &key_prefix; const string &key_suffix; FarCreateArgs( const vector<string> &in_fnames, const string &out_fname, const int32 generate_keys, const bool file_list_input, const FarType &far_type, const string &key_prefix, const string &key_suffix) : in_fnames(in_fnames), out_fname(out_fname), generate_keys(generate_keys), file_list_input(file_list_input), far_type(far_type), key_prefix(key_prefix), key_suffix(key_suffix) { } }; template<class Arc> void FarCreate(FarCreateArgs *args) { fst::FarCreate<Arc>(args->in_fnames, args->out_fname, args->generate_keys, args->file_list_input, args->far_type, args->key_prefix, args->key_suffix); } void FarCreate(const vector<string> &in_fnames, const string &out_fname, const string &arc_type, const int32 generate_keys, const bool file_list_input, const FarType &far_type, const string &key_prefix, const string &key_suffix); typedef args::Package<const vector<string> &, int32, const string&, const string&, const string&, const string&> FarExtractArgs; template<class Arc> void FarExtract(FarExtractArgs *args) { fst::FarExtract<Arc>( args->arg1, args->arg2, args->arg3, args->arg4, args->arg5, args->arg6); } void FarExtract(const vector<string> &ifilenames, const string &arc_type, int32 generate_filenames, const string &begin_key, const string &end_key, const string &filename_prefix, const string &filename_suffix); typedef args::Package<const vector<string> &, const string &, const string &, const bool> FarInfoArgs; template <class Arc> void FarInfo(FarInfoArgs *args) { fst::FarInfo<Arc>(args->arg1, args->arg2, args->arg3, args->arg4); } void FarInfo(const vector<string> &filenames, const string &arc_type, const string &begin_key, const string &end_key, const bool list_fsts); struct FarPrintStringsArgs { const vector<string> &ifilenames; const FarEntryType entry_type; const FarTokenType token_type; const string &begin_key; const string &end_key; const bool print_key; const string &symbols_fname; const int32 generate_filenames; const string &filename_prefix; const string &filename_suffix; FarPrintStringsArgs( const vector<string> &ifilenames, const FarEntryType entry_type, const FarTokenType token_type, const string &begin_key, const string &end_key, const bool print_key, const string &symbols_fname, const int32 generate_filenames, const string &filename_prefix, const string &filename_suffix) : ifilenames(ifilenames), entry_type(entry_type), token_type(token_type), begin_key(begin_key), end_key(end_key), print_key(print_key), symbols_fname(symbols_fname), generate_filenames(generate_filenames), filename_prefix(filename_prefix), filename_suffix(filename_suffix) { } }; template <class Arc> void FarPrintStrings(FarPrintStringsArgs *args) { fst::FarPrintStrings<Arc>( args->ifilenames, args->entry_type, args->token_type, args->begin_key, args->end_key, args->print_key, args->symbols_fname, args->generate_filenames, args->filename_prefix, args->filename_suffix); } void FarPrintStrings(const vector<string> &ifilenames, const string &arc_type, const FarEntryType entry_type, const FarTokenType token_type, const string &begin_key, const string &end_key, const bool print_key, const string &symbols_fname, const int32 generate_filenames, const string &filename_prefix, const string &filename_suffix); } // namespace script } // namespace fst #define REGISTER_FST_FAR_OPERATIONS(ArcType) \ REGISTER_FST_OPERATION(FarCompileStrings, ArcType, FarCompileStringsArgs); \ REGISTER_FST_OPERATION(FarCreate, ArcType, FarCreateArgs); \ REGISTER_FST_OPERATION(FarExtract, ArcType, FarExtractArgs); \ REGISTER_FST_OPERATION(FarInfo, ArcType, FarInfoArgs); \ REGISTER_FST_OPERATION(FarPrintStrings, ArcType, FarPrintStringsArgs) #endif // FST_EXTENSIONS_FAR_FARSCRIPT_H_