• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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@google.com (Michael Riley)
17 // Modified: jpr@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.
FarTypeFromString(const string & str)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;.
FarTypeToString(FarType type)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 
StringToFarEntryType(const string & s)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 
StringToFarTokenType(const string & s)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 
LoadArcTypeFromFar(const string & far_fname)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 
LoadArcTypeFromFst(const string & fst_fname)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