Home | History | Annotate | Download | only in far
      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 (at) 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>
     24 using 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 
     37 namespace fst {
     38 namespace 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!
     44 struct 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 
     80 template <class Arc>
     81 void 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 
     89 void 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!
    110 struct 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 
    129 template<class Arc>
    130 void 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 
    136 void 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 
    146 typedef args::Package<const vector<string> &, int32,
    147                       const string&, const string&, const string&,
    148                       const string&> FarExtractArgs;
    149 
    150 template<class Arc>
    151 void FarExtract(FarExtractArgs *args) {
    152   fst::FarExtract<Arc>(
    153       args->arg1, args->arg2, args->arg3, args->arg4, args->arg5, args->arg6);
    154 }
    155 
    156 void 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 
    162 typedef args::Package<const vector<string> &, const string &,
    163                       const string &, const bool> FarInfoArgs;
    164 
    165 template <class Arc>
    166 void FarInfo(FarInfoArgs *args) {
    167   fst::FarInfo<Arc>(args->arg1, args->arg2, args->arg3, args->arg4);
    168 }
    169 
    170 void 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 
    176 struct 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 
    201 template <class Arc>
    202 void 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 
    211 void 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