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