Skip to content
Snippets Groups Projects
Dot.cpp 1.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jan Trávníček's avatar
    Jan Trávníček committed
    /*
     * Dot.cpp
     *
     *  Created on: 16. 8. 2017
     *	  Author: Jan Travnicek
     */
    
    #include "Dot.h"
    #include <registration/AlgoRegistration.hpp>
    #include <cstdlib>
    
    #include <alib/algorithm>
    
    #include <cctype>
    
    #include <exception/CommonException.h>
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    namespace cli {
    
    namespace builtin {
    
    
    std::vector < std::string> Dot::m_DotAllowedTypes { "dot", "xdot", "ps", "pdf", "svg", "svgz", "fig", "png", "gif", "jpg", "jpeg", "json", "imap", "cmapx" };
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    void Dot::dot ( const std::string & data ) {
    
    	int res = std::system( ( "dot -Tx11 <<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) );
    
    	if ( res )
    		throw exception::CommonException ( "The dot command exited unsuccessfuly. Return value was " + ext::to_string ( res ) + "." );
    
    }
    
    void Dot::dot ( const std::string & data, const std::string & outputType, const std::string & outputFile ) {
    	std::string outputTypeLower;
    	std::transform ( outputType.begin( ), outputType.end(), std::back_inserter ( outputTypeLower ), ::tolower);
    
    	if ( std::find ( m_DotAllowedTypes.begin( ), m_DotAllowedTypes.end ( ), outputType ) == m_DotAllowedTypes.end ( ) )
    		throw exception::CommonException ( "Dot outputType is invalid." );
    
    
    	int res = std::system ( ( "dot -T" + outputTypeLower + " -o " + outputFile + "<<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) );
    
    	if ( res )
    		throw exception::CommonException ( "The dot command exited unsuccessfuly. Return value was " + ext::to_string ( res ) + "." );
    
    auto DotTx11 = registration::AbstractRegister < Dot, void, const std::string & > ( Dot::dot, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "dot_data" );
    auto DotFile = registration::AbstractRegister < Dot, void, const std::string &, const std::string &, const std::string & > ( Dot::dot, abstraction::AlgorithmCategories::AlgorithmCategory::DEFAULT, "dot_data", "output_type", "file_name" );
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    } /* namespace builtin */
    
    } /* namespace cli */