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