Home | History | Annotate | Download | only in far
      1 // main.cc
      2 
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 //
     15 // Copyright 2005-2010 Google, Inc.
     16 // Author: riley (at) google.com (Michael Riley)
     17 // Modified: jpr (at) google.com (Jake Ratkiewicz) to not use new arc-dispatch
     18 //
     19 // \file
     20 // Definitions and functions for invoking and using Far main
     21 // functions that support multiple and extensible arc types.
     22 
     23 #include <string>
     24 #include <vector>
     25 using std::vector;
     26 
     27 #include <iostream>
     28 #include <fstream>
     29 #include <sstream>
     30 #include <fst/extensions/far/main.h>
     31 
     32 namespace fst {
     33 
     34 // Return the 'FarType' value corresponding to a far type name.
     35 FarType FarTypeFromString(const string &str) {
     36   FarType type = FAR_DEFAULT;
     37   if (str == "fst")
     38     type = FAR_FST;
     39   else if (str == "stlist")
     40     type = FAR_STLIST;
     41   else if (str == "sttable")
     42     type = FAR_STTABLE;
     43   else if (str == "default")
     44     type = FAR_DEFAULT;
     45   return type;
     46 }
     47 
     48 
     49 // Return the textual name  corresponding to a 'FarType;.
     50 string FarTypeToString(FarType type) {
     51   switch (type) {
     52     case FAR_FST:
     53       return "fst";
     54     case FAR_STLIST:
     55       return "stlist";
     56     case FAR_STTABLE:
     57       return "sttable";
     58     case FAR_DEFAULT:
     59       return "default";
     60     default:
     61       return "<unknown>";
     62   }
     63 }
     64 
     65 FarEntryType StringToFarEntryType(const string &s) {
     66   if (s == "line") {
     67     return FET_LINE;
     68   } else if (s == "file") {
     69     return FET_FILE;
     70   } else {
     71     FSTERROR() << "Unknown FAR entry type: " << s;
     72     return FET_LINE;  // compiler requires return
     73   }
     74 }
     75 
     76 FarTokenType StringToFarTokenType(const string &s) {
     77   if (s == "symbol") {
     78     return FTT_SYMBOL;
     79   } else if (s == "byte") {
     80     return FTT_BYTE;
     81   } else if (s == "utf8") {
     82     return FTT_UTF8;
     83   } else {
     84     FSTERROR() << "Unknown FAR entry type: " << s;
     85     return FTT_SYMBOL;  // compiler requires return
     86   }
     87 }
     88 
     89 
     90 string LoadArcTypeFromFar(const string &far_fname) {
     91   FarHeader hdr;
     92 
     93   if (!hdr.Read(far_fname)) {
     94     FSTERROR() << "Error reading FAR: " << far_fname;
     95     return "";
     96   }
     97 
     98   string atype = hdr.ArcType();
     99   if (atype == "unknown") {
    100     FSTERROR() << "Empty FST archive: " << far_fname;
    101     return "";
    102   }
    103 
    104   return atype;
    105 }
    106 
    107 string LoadArcTypeFromFst(const string &fst_fname) {
    108   FstHeader hdr;
    109   ifstream in(fst_fname.c_str(), ifstream::in | ifstream::binary);
    110   if (!hdr.Read(in, fst_fname)) {
    111     FSTERROR() << "Error reading FST: " << fst_fname;
    112     return "";
    113   }
    114 
    115   return hdr.ArcType();
    116 }
    117 
    118 }  // namespace fst
    119