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