1f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
2f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Licensed under the Apache License, Version 2.0 (the "License");
3f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// you may not use this file except in compliance with the License.
4f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// You may obtain a copy of the License at
5f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
6f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//     http://www.apache.org/licenses/LICENSE-2.0
7f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
8f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Unless required by applicable law or agreed to in writing, software
9f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// distributed under the License is distributed on an "AS IS" BASIS,
10f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// See the License for the specific language governing permissions and
12f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// limitations under the License.
13f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
14f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Copyright 2005-2010 Google, Inc.
15f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Author: jpr@google.com (Jake Ratkiewicz)
16f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
17f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#ifndef FST_SCRIPT_DRAW_H_
18f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#define FST_SCRIPT_DRAW_H_
19f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
20f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/arg-packs.h>
21f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/fst-class.h>
22f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/script/draw-impl.h>
23f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <iostream>
24f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fstream>
25f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
26f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace fst {
27f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace script {
28f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
29f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Note: it is safe to pass these strings as references because
30f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// this struct is only used to pass them deeper in the call graph.
31f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Be sure you understand why this is so before using this struct
32f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// for anything else!
33f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstruct FstDrawerArgs {
34f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const FstClass &fst;
35f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const SymbolTable *isyms;
36f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const SymbolTable *osyms;
37f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const SymbolTable *ssyms;
38f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const bool accep;
39f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const string& title;
40f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const float width;
41f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const float height;
42f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const bool portrait;
43f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const bool vertical;
44f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const float ranksep;
45f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const float nodesep;
46f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const int fontsize;
47f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const int precision;
48f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const bool show_weight_one;
49f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  ostream *ostrm;
50f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const string &dest;
51f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
52f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  FstDrawerArgs(const FstClass &fst,
53f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                const SymbolTable *isyms,
54f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                const SymbolTable *osyms,
55f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                const SymbolTable *ssyms,
56f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                bool accep,
57f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                const string &title,
58f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                float width,
59f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                float height,
60f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                bool portrait,
61f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                bool vertical,
62f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                float ranksep,
63f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                float nodesep,
64f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                int fontsize,
65f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                int precision,
66f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                bool show_weight_one,
67f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                ostream *ostrm,
68f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                const string &dest) :
69f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson      fst(fst), isyms(isyms), osyms(osyms), ssyms(ssyms), accep(accep),
70f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson      title(title), width(width), height(height), portrait(portrait),
71f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson      vertical(vertical), ranksep(ranksep), nodesep(nodesep),
72f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson      fontsize(fontsize), precision(precision),
73f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson      show_weight_one(show_weight_one), ostrm(ostrm), dest(dest) { }
74f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson};
75f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
76f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
77f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsontemplate<class Arc>
78f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonvoid DrawFst(FstDrawerArgs *args) {
79f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  const Fst<Arc> &fst = *(args->fst.GetFst<Arc>());
80f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
81f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  FstDrawer<Arc> fstdrawer(fst, args->isyms, args->osyms, args->ssyms,
82f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                           args->accep, args->title, args->width,
83f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                           args->height, args->portrait,
84f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                           args->vertical, args->ranksep,
85f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                           args->nodesep, args->fontsize,
86f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson                           args->precision, args->show_weight_one);
87f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  fstdrawer.Draw(args->ostrm, args->dest);
88f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}
89f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
90f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonvoid DrawFst(const FstClass &fst,
91f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             const SymbolTable *isyms,
92f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             const SymbolTable *osyms,
93f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             const SymbolTable *ssyms,
94f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             bool accep,
95f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             const string &title,
96f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             float width,
97f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             float height,
98f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             bool portrait,
99f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             bool vertical,
100f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             float ranksep,
101f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             float nodesep,
102f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             int fontsize,
103f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             int precision,
104f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             bool show_weight_one,
105f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             ostream *ostrm,
106f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson             const string &dest);
107f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
108f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}  // namespace script
109f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}  // namespace fst
110f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
111f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
112f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
113f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#endif  // FST_SCRIPT_DRAW_H_
114