14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* FILE: netw_dump.cpp 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * DATE MODIFIED: 31-Aug-07 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * DESCRIPTION: Part of the SREC graph compiler project source files. 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <fstream> 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <iostream> 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <sstream> 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string> 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "netw_arc.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "sub_grph.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "grxmldoc.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::RemapForSortedOutput ( GRXMLDoc &p_Doc ) 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int origIndex, sortedIndex; 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (int ii= 0; ii < numArc; ii++) { 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project origIndex= arc[ii]->GetInput(); 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (origIndex >= 0 && p_Doc.findSortedLabelIndex (origIndex, sortedIndex )) 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project arc[ii]->AssignInput (sortedIndex); 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::WriteForwardGraphFile( std::string & fileName, GRXMLDoc &p_Doc ) 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Creates file of forward graph - the {name}.G.txt file 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int loc; 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string inLabel; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::ofstream outfile; 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string label; 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string separator = "\t"; 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Eps = "eps"; 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project RemapForSortedOutput (p_Doc); 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SortLanguageForMin (); 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p_Doc.sortLabels(); 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.open ( fileName.c_str() ); 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (int ii= 0; ii < numArc; ii++) { 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel=""; 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project loc = forwardList[ii]; 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch ( arc[loc]->inputLabel ) { 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TERMINAL_LABEL: // Terminal transition 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << std::endl; 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case NONE_LABEL: // Null transition 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << Eps << std::endl; 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TAG_LABEL: // Tag transition 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WB_LABEL: // Word boundary transition 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINSCOPE_LABEL: // Start of scope 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDSCOPE_LABEL: // End of scope 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINRULE_LABEL: // Start of rule 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDRULE_LABEL: // End of rule 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case DISCARD_LABEL: // Discard (internal) 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // if (!p_Doc.findLabel( arc[loc]->inputLabel, inLabel ) ) { 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findSortedLabel( arc[loc]->inputLabel, inLabel ) ) { 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->inputLabel; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = ss.str(); 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << inLabel.c_str() << std::endl; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } // switch 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.close(); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SortLanguage (); 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::WriteForwardGraphWithSemantic ( std::string & fileName, GRXMLDoc &p_Doc ) 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int loc; 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string inLabel, outLabel; 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string tag; 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Eps = "eps"; 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string OpenBrace = "{"; 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string CloseBrace = "}"; 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Separator ="\t"; 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::ofstream outfile; 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string label; 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string separator = "\t"; 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.open ( fileName.c_str() ); 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project RemapForSortedOutput (p_Doc); 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SortLanguageForMin (); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p_Doc.sortLabels(); 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for ( int ii= 0; ii < numArc; ii++ ) { 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project loc= forwardList[ii]; 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = ""; 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch ( arc[loc]->inputLabel ) { 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINRULE_LABEL: // Start of rule 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = Eps; 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = OpenBrace; 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDRULE_LABEL: // End of rule 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = Eps; 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findRule( arc[loc]->outputLabel, outLabel ) ) { 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = "(" + ss.str() + ")"; 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = outLabel + CloseBrace; 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case NONE_LABEL: // Null transition 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = Eps; 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel= Eps; 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TAG_LABEL: // Tag transition 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = Eps; 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << SCRIPT_LABEL_PREFIX << arc[loc]->outputLabel; 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TERMINAL_LABEL: // Terminal transition 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ""; 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WB_LABEL: // Word boundary transition 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINSCOPE_LABEL: // Start of scope 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDSCOPE_LABEL: // End of scope 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case DISCARD_LABEL: // Discard (internal) 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Input label 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // if (!p_Doc.findLabel( arc[loc]->inputLabel, inLabel ) ) { 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findSortedLabel( arc[loc]->inputLabel, inLabel ) ) { 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = arc[loc]->inputLabel; 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Output label 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel == -1) 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel= Eps; 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << SCRIPT_LABEL_PREFIX << arc[loc]->outputLabel; 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( outLabel.empty() ) 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << std::endl; 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << Separator << arc[loc]->toId << Separator << inLabel.c_str() << Separator << outLabel.c_str() << std::endl; 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p_Doc.addOLabelToOList( outLabel); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.close(); 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::WriteHMMGraphFile( std::string & fileName, GRXMLDoc &p_Doc ) 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Creates file of forward graph - the {name}.G.txt file 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int loc; 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string inLabel; 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string outLabel; 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string phLabel; 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string metaname; 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string wtw; 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::ofstream outfile; 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string label; 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string separator = "\t"; 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Eps = "eps"; 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Pau = "-pau-"; 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Pau2 = "-pau2-"; 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bool bRes; 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project metaname = "word_penalty"; 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bRes = p_Doc.findMeta(metaname, wtw); 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.open ( fileName.c_str() ); 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (int ii= 0; ii < numArc; ii++) { 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel=""; 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project loc = forwardList[ii]; 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch ( arc[loc]->inputLabel ) { 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TERMINAL_LABEL: // Terminal transition 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << std::endl; 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case NONE_LABEL: // Null transition 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel >= 0) { 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->outputLabel, outLabel ) ) { 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << Eps << separator << outLabel.c_str() << std::endl; 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << Eps << separator << Eps << std::endl; 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WB_LABEL: // Word boundary transition 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel >= 0) { 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->outputLabel, outLabel ) ) { 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << ".wb" << separator << outLabel.c_str() << std::endl; 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << ".wb" << separator << Eps << std::endl; 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TAG_LABEL: // Tag transition 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINSCOPE_LABEL: // Start of scope 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDSCOPE_LABEL: // End of scope 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINRULE_LABEL: // Start of rule 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDRULE_LABEL: // End of rule 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case DISCARD_LABEL: // Discard (internal) 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel >= 0) { 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->outputLabel, outLabel ) ) { 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (arc[loc]->outputLabel == INITIAL_LABEL) 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel= Pau; 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (arc[loc]->outputLabel == FINAL_LABEL) 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel= Pau2; 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel= Eps; 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } // switch 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.close(); 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::WritePhonemeGraphFile( std::string & fileName, GRXMLDoc &p_Doc ) 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Creates file of forward graph - the {name}.G.txt file 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int loc; 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string inLabel; 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string outLabel; 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::ofstream outfile; 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string label; 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string separator = "\t"; 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string Eps = "eps"; 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.open ( fileName.c_str() ); 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (int ii= 0; ii < numArc; ii++) { 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel=""; 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project loc = forwardList[ii]; 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch ( arc[loc]->inputLabel ) { 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TERMINAL_LABEL: // Terminal transition 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << std::endl; 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case NONE_LABEL: // Null transition 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel >= 0) { 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->outputLabel, outLabel ) ) { 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << Eps << separator << outLabel.c_str() << std::endl; 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << Eps << separator << Eps << std::endl; 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case WB_LABEL: // Word boundary transition 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (arc[loc]->outputLabel >= 0) { 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->outputLabel, outLabel ) ) { 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->outputLabel; 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = ss.str(); 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << ".wb" << separator << outLabel.c_str() << std::endl; 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << ".wb" << separator << Eps << std::endl; 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case TAG_LABEL: // Tag transition 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINSCOPE_LABEL: // Start of scope 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDSCOPE_LABEL: // End of scope 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case BEGINRULE_LABEL: // Start of rule 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case ENDRULE_LABEL: // End of rule 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case DISCARD_LABEL: // Discard (internal) 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( arc[loc]->inputLabel >= 0) { 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // Note negative index 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( -arc[loc]->inputLabel, inLabel ) ) { 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::stringstream ss; 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ss << arc[loc]->inputLabel; 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = ss.str(); 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile << arc[loc]->fromId << separator << arc[loc]->toId << separator << inLabel.c_str() << separator << Eps << std::endl; 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } // switch 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outfile.close(); 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid SubGraph::PrintWithLabels( GRXMLDoc &p_Doc ) 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int loc; 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string inLabel, outLabel; 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::string label; 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf ("Graph %s (%d %d)\n", title, startId, lastId); 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (int ii= 0; ii < numArc; ii++) { 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project loc= forwardList[ii]; 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findLabel( arc[loc]->inputLabel, inLabel ) ) { 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project inLabel = arc[loc]->inputLabel; 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //std::stringstream ss; 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //ss << arc[loc]->inputLabel; 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //inLabel = ss.str(); 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!p_Doc.findTag( arc[loc]->outputLabel, outLabel ) ) { 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project outLabel = arc[loc]->outputLabel; 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //std::stringstream ss; 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //ss << arc[loc]->outputLabel; 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //outLabel = ss.str(); 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project std::cout << arc[loc]->fromId <<" " << arc[loc]->toId << " " << inLabel.c_str() <<" " << outLabel.c_str() << std::endl; 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid NUANArc::Dump(GRXMLDoc &p_Doc ) 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // I need a handle to the grxml doc object in order to access labels 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf ("%d %d %d %d\n", fromId, toId, inputLabel, outputLabel); 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 375