// 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_