You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.8 KiB
141 lines
3.8 KiB
/*****************************************************************************
|
|
* soutchain.cpp: A class to generate Stream Output Chains
|
|
****************************************************************************
|
|
* Copyright (C) 2019 Jérôme Froissart <software@froiss.art>
|
|
*
|
|
* Authors: Jérôme Froissart <software@froiss.art>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
|
*****************************************************************************/
|
|
|
|
#include "soutchain.hpp"
|
|
|
|
QString SoutOption::to_string() const
|
|
{
|
|
if( kind == EscapedString )
|
|
{
|
|
return stringValue;
|
|
}
|
|
if( kind == String )
|
|
{
|
|
QString ret = "";
|
|
if( !stringValue.isEmpty() )
|
|
{
|
|
QString quotes = stringValue.toStdString().find_first_of("=, \t")
|
|
!= std::string::npos ? "'" : "";
|
|
char *psz = config_StringEscape( qtu(stringValue) );
|
|
if( psz )
|
|
{
|
|
ret = quotes + qfu( psz ) + quotes;
|
|
free( psz );
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
else
|
|
{
|
|
return nestedModule.to_string();
|
|
}
|
|
}
|
|
|
|
QString SoutModule::to_string() const
|
|
{
|
|
QString s = moduleName;
|
|
|
|
if( options.size() > 0 )
|
|
{
|
|
s += "{";
|
|
}
|
|
OptionsType::const_iterator it;
|
|
for( it=options.begin(); it!=options.end(); )
|
|
{
|
|
s += it->first;
|
|
QString value = it->second.to_string();
|
|
if( !value.isEmpty() )
|
|
s += "=" + value;
|
|
++it;
|
|
if( it != options.end() )
|
|
{
|
|
s += ",";
|
|
}
|
|
}
|
|
if( options.size() > 0 )
|
|
{
|
|
s += "}";
|
|
}
|
|
return s;
|
|
}
|
|
|
|
void SoutModule::option( const QString& option, const SoutOption& value )
|
|
{
|
|
options.append( OptionPairType( option, value ) );
|
|
}
|
|
|
|
void SoutModule::option( const QString& option, const QString& value, bool escaped )
|
|
{
|
|
options.append( OptionPairType( option, SoutOption(value, escaped) ) );
|
|
}
|
|
|
|
void SoutModule::option( const QString& option )
|
|
{
|
|
options.append( OptionPairType( option, "" ) );
|
|
}
|
|
|
|
QString SoutChain::getHeader() const
|
|
{
|
|
return hdr;
|
|
}
|
|
|
|
QString SoutChain::to_string() const
|
|
{
|
|
QString chain = hdr;
|
|
for( int m=0; m<modules.size(); m++ )
|
|
{
|
|
chain += modules[m].to_string();
|
|
if( m < modules.size() - 1 )
|
|
{
|
|
chain += ":";
|
|
}
|
|
}
|
|
|
|
return chain;
|
|
}
|
|
|
|
void SoutChain::option( const QString& name, const QString& value, bool escaped )
|
|
{
|
|
if( modules.size() > 0 )
|
|
{
|
|
modules.back().option( name, value, escaped );
|
|
}
|
|
}
|
|
void SoutChain::option( const QString& name, const int i_value, const int i_precision )
|
|
{
|
|
option( name, QString::number( i_value, i_precision ) );
|
|
}
|
|
void SoutChain::option( const QString& name, const double f_value )
|
|
{
|
|
option( name, QString::number( f_value ) );
|
|
}
|
|
void SoutChain::option( const QString& name, const QString& base, const int i_value, const int i_precision )
|
|
{
|
|
option( name, base + ":" + QString::number( i_value, i_precision ) );
|
|
}
|
|
void SoutChain::option( const QString& name, const SoutModule& nested )
|
|
{
|
|
if( modules.size() > 0 )
|
|
{
|
|
modules.back().option( name, nested );
|
|
}
|
|
}
|