1bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// fstreverse.cc
2bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
3bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
4bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// you may not use this file except in compliance with the License.
5bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// You may obtain a copy of the License at
6bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
7bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     http://www.apache.org/licenses/LICENSE-2.0
8bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
9bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Unless required by applicable law or agreed to in writing, software
10bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// distributed under the License is distributed on an "AS IS" BASIS,
11bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// See the License for the specific language governing permissions and
13bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// limitations under the License.
14bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
15bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Copyright 2005-2010 Google, Inc.
16bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Author: riley@google.com (Michael Riley)
17bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Modified: jpr@google.com (Jake Ratkiewicz) Changed to use FstClass
18bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
19bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// \file
20bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Reverses the paths in an FST.
21bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
22bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
23bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <string>
24bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
25bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <fst/script/reverse.h>
26bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <fst/script/fst-class.h>
27bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <iostream>
28bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <fstream>
29bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <sstream>
30bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
31bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgint main(int argc, char **argv) {
32bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  using fst::script::FstClass;
33bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  using fst::script::VectorFstClass;
34bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  using fst::script::Reverse;
35bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
36bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  string usage = "Reverses the paths in an FST.\n\n  Usage: ";
37bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  usage += argv[0];
38bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  usage += " [in.fst [out.fst]]\n";
39bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
40bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  std::set_new_handler(FailedNewHandler);
41  SET_FLAGS(usage.c_str(), &argc, &argv, true);
42  if (argc > 3) {
43    ShowUsage();
44    return 1;
45  }
46
47  string in_name = (argc > 1 && (strcmp(argv[1], "-") != 0)) ? argv[1] : "";
48  string out_name = argc > 2 ? argv[2] : "";
49
50  FstClass *ifst = FstClass::Read(in_name);
51  if (!ifst) return 1;
52
53  VectorFstClass *out = new VectorFstClass(ifst->ArcType());
54
55  Reverse(*ifst, out);
56
57  out->Write(out_name);
58
59  return 0;
60}
61