19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// fstconcat.cc 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Licensed under the Apache License, Version 2.0 (the "License"); 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// you may not use this file except in compliance with the License. 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// You may obtain a copy of the License at 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// http://www.apache.org/licenses/LICENSE-2.0 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Unless required by applicable law or agreed to in writing, software 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// distributed under the License is distributed on an "AS IS" BASIS, 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// See the License for the specific language governing permissions and 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// limitations under the License. 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Copyright 2005-2010 Google, Inc. 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Author: riley@google.com (Michael Riley) 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Modified: jpr@google.com (Jake Ratkiewicz) to use FstClass 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// \file 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// Concatenates two FSTs. 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <string> 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <fst/script/concat.h> 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint main(int argc, char **argv) { 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall namespace s = fst::script; 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall using fst::script::FstClass; 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall using fst::script::MutableFstClass; 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall string usage = "Concatenates two FSTs.\n\n Usage: "; 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall usage += argv[0]; 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall usage += " in1.fst in2.fst [out.fst]\n"; 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall std::set_new_handler(FailedNewHandler); 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SET_FLAGS(usage.c_str(), &argc, &argv, true); 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (argc < 3 || argc > 4) { 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ShowUsage(); 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 1; 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall string in1_name = strcmp(argv[1], "-") == 0 ? "" : argv[1]; 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall string in2_name = strcmp(argv[2], "-") == 0 ? "" : argv[2]; 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall string out_fname = argc > 3 ? argv[3] : ""; 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (in1_name.empty() && in2_name.empty()) { 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall LOG(ERROR) << argv[0] << ": Can't take both inputs from standard input."; 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 1; 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MutableFstClass *fst1 = MutableFstClass::Read(in1_name, true); 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!fst1) return 1; 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall FstClass *fst2 = FstClass::Read(in2_name); 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if (!fst2) return 1; 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall s::Concat(fst1, *fst2); 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall fst1->Write(out_fname); 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return 0; 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall