From 8a77c9656aa625a8a2cf98c3704ce3a760d6f840 Mon Sep 17 00:00:00 2001 From: Tomas Pecka <peckato1@fit.cvut.cz> Date: Tue, 5 Sep 2017 11:54:01 +0200 Subject: [PATCH] Cli builtin dot: Save in multiple formats --- alib2cli/src/builtin/Dot.cpp | 19 +++++++++++++++++-- alib2cli/src/builtin/Dot.h | 7 ++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/alib2cli/src/builtin/Dot.cpp b/alib2cli/src/builtin/Dot.cpp index e867028d59..6f78f73878 100644 --- a/alib2cli/src/builtin/Dot.cpp +++ b/alib2cli/src/builtin/Dot.cpp @@ -8,16 +8,31 @@ #include "Dot.h" #include <registration/AlgoRegistration.hpp> #include <cstdlib> +#include <algorithm> +#include <cctype> 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" }; + void Dot::dot ( const std::string & data ) { - std::system ( ( "dot -Tx11 <<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) ); + ( void ) std::system( ( "dot -Tx11 <<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) ); +} + +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." ); + + ( void ) std::system ( ( "dot -T" + outputTypeLower + " -o " + outputFile + "<<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) ); } -auto DotString = registration::AbstractRegister < Dot, void, const std::string & > ( Dot::dot ); +auto DotTx11 = registration::AbstractRegister < Dot, void, const std::string & > ( Dot::dot ); +auto DotTpng = registration::AbstractRegister < Dot, void, const std::string &, const std::string &, const std::string & > ( Dot::dot ); } /* namespace builtin */ diff --git a/alib2cli/src/builtin/Dot.h b/alib2cli/src/builtin/Dot.h index c8c101acd8..788cdabe55 100644 --- a/alib2cli/src/builtin/Dot.h +++ b/alib2cli/src/builtin/Dot.h @@ -9,6 +9,7 @@ #define _DOT_H_ #include <string> +#include <vector> namespace cli { @@ -17,9 +18,13 @@ namespace builtin { class Dot { public: /** - * Removes dead states from FSM. Melichar 2.29 + * Cli builtin for DOT format visualization */ static void dot( const std::string & dot ); + static void dot ( const std::string & data, const std::string & outputType, const std::string & outputFile ); + +private: + static std::vector < std::string > m_DotAllowedTypes; }; } /* namespace builtin */ -- GitLab