From 5e2371c636f6682e513cd45ecb9a7d1e90bdbc4a Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 11 Feb 2018 09:57:19 +0000 Subject: [PATCH] Use a-lists for Lispy output. - Also bump long strings onto a new line in JSON and LISP formats. --- scripts/piped-work/pipe_test.py | 4 +-- src/Shuttle.cpp | 6 ++-- src/commands/CommandTargets.cpp | 60 ++++++++++++++++++++++++++------- src/commands/CommandTargets.h | 12 ++++--- src/effects/EffectManager.cpp | 3 +- 5 files changed, 63 insertions(+), 22 deletions(-) diff --git a/scripts/piped-work/pipe_test.py b/scripts/piped-work/pipe_test.py index 4a8ec4ddd..347abd572 100644 --- a/scripts/piped-work/pipe_test.py +++ b/scripts/piped-work/pipe_test.py @@ -65,7 +65,7 @@ def do( command ) : def quickTest() : do( 'Help: Command=Help' ) - #do( 'Help: Command="GetInfo"' ) - do( 'SetPreference: Name=GUI/Theme Value=dark Reload=1' ) + do( 'Help: Command="GetInfo"' ) + #do( 'SetPreference: Name=GUI/Theme Value=classic Reload=1' ) quickTest() diff --git a/src/Shuttle.cpp b/src/Shuttle.cpp index 3f38b4145..54d4a0bbd 100644 --- a/src/Shuttle.cpp +++ b/src/Shuttle.cpp @@ -671,11 +671,12 @@ void ShuttleGetDefinition::DefineEnum( wxString &var, const wxChar * key, const AddItem( "unchanged", "default" ); else AddItem( vdefault, "default" ); - AddField( "enum" ); + StartField( "enum" ); StartArray(); for( size_t i=0;i0)?", ":"", name, !name.IsEmpty()?":":"",value)); + Update( wxString::Format( "%s%s%s%s\"%s\"", (mCounts.Last()>0)?", ":"", Padding, name, !name.IsEmpty()?":":"",value)); mCounts.Last() += 1; } void CommandMessageTarget::AddBool(const bool value, const wxString &name){ @@ -70,9 +73,16 @@ void CommandMessageTarget::AddItem(const double value, const wxString &name){ mCounts.Last() += 1; } -void CommandMessageTarget::AddField(const wxString &name){ +void CommandMessageTarget::StartField(const wxString &name){ Update( wxString::Format( "%s%s%s", (mCounts.Last()>0)?", ":"", name, !name.IsEmpty()?":":"")); - mCounts.Last() = 0; // Lie so that we don't get a comma. + mCounts.Last() += 1; + mCounts.push_back( 0 ); +} + +void CommandMessageTarget::EndField(){ + if( mCounts.GetCount() > 1 ){ + mCounts.pop_back(); + } } void CommandMessageTarget::Flush(){ @@ -109,23 +119,43 @@ void LispyCommandMessageTarget::EndStruct(){ Update( " )" ); } void LispyCommandMessageTarget::AddItem(const wxString &value, const wxString &name){ - Update( wxString::Format( "%s%s%s\"%s\"", (mCounts.Last()>0)?", ":"", name, !name.IsEmpty()?",":"",value)); + wxString Padding; + Padding.Pad( mCounts.GetCount() *2 -2); + Padding = (( value.length() < 15 ) || (mCounts.Last()<=0)) ? "" : wxString("\n") + Padding; + + if( name.IsEmpty() ) + Update( wxString::Format( "%s%s\"%s\"", (mCounts.Last()>0)?", ":"", Padding, value)); + else + Update( wxString::Format( "%s%s( %s, \"%s\" )", (mCounts.Last()>0)?", ":"", Padding, name, value)); mCounts.Last() += 1; } void LispyCommandMessageTarget::AddBool(const bool value, const wxString &name){ - Update( wxString::Format( "%s%s%s%s", (mCounts.Last()>0)?", ":"", name, !name.IsEmpty()?",":"",value?"True":"False")); + if( name.IsEmpty() ) + Update( wxString::Format( "%s%s", (mCounts.Last()>0)?", ":"",value?"True":"False")); + else + Update( wxString::Format( "%s( %s, %s )", (mCounts.Last()>0)?", ":"", name,value?"True":"False")); mCounts.Last() += 1; } void LispyCommandMessageTarget::AddItem(const double value, const wxString &name){ - Update( wxString::Format( "%s%s%s%g", (mCounts.Last()>0)?", ":"", name, !name.IsEmpty()?",":"",value)); + if( name.IsEmpty() ) + Update( wxString::Format( "%s%g", (mCounts.Last()>0)?", ":"", value)); + else + Update( wxString::Format( "%s( %s, %g )", (mCounts.Last()>0)?", ":"", name,value)); mCounts.Last() += 1; } -void LispyCommandMessageTarget::AddField(const wxString &name){ - Update( wxString::Format( "%s%s%s", (mCounts.Last()>0)?", ":"", name, !name.IsEmpty()?",":"")); - mCounts.Last() = 0; // Lie so that we don't get a comma. +void LispyCommandMessageTarget::StartField(const wxString &name){ + Update( wxString::Format( "%s( %s, ", (mCounts.Last()>0)?", ":"", name )); + mCounts.Last() += 1; + mCounts.push_back( 0 ); } +void LispyCommandMessageTarget::EndField(){ + if( mCounts.GetCount() > 1 ){ + mCounts.pop_back(); + } + Update( " )" ); +} @@ -180,12 +210,16 @@ void BriefCommandMessageTarget::AddItem(const double value, const wxString &n mCounts.Last() += 1; } -void BriefCommandMessageTarget::AddField(const wxString &name){ - mCounts.Last() = 0; // Lie so that we don't get a comma. +void BriefCommandMessageTarget::StartField(const wxString &name){ + mCounts.Last() += 1; + mCounts.push_back( 0 ); } - - +void BriefCommandMessageTarget::EndField(){ + if( mCounts.GetCount() > 1 ){ + mCounts.pop_back(); + } +} LispifiedCommandOutputTargets::LispifiedCommandOutputTargets( CommandOutputTargets & target ) diff --git a/src/commands/CommandTargets.h b/src/commands/CommandTargets.h index 1a23e48c2..ffe98a3ff 100644 --- a/src/commands/CommandTargets.h +++ b/src/commands/CommandTargets.h @@ -85,7 +85,8 @@ public: virtual void AddItem(const wxString &value , const wxString &name="" ); virtual void AddBool(const bool value , const wxString &name="" ); virtual void AddItem(const double value , const wxString &name="" ); - virtual void AddField( const wxString &name="" ); + virtual void StartField( const wxString &name="" ); + virtual void EndField( ); virtual void Flush(); wxArrayInt mCounts; }; @@ -103,7 +104,8 @@ public: virtual void AddItem(const wxString &value , const wxString &name="" ){ mTarget.AddItem(value,name);}; virtual void AddBool(const bool value , const wxString &name="" ){ mTarget.AddBool(value,name);}; virtual void AddItem(const double value , const wxString &name="" ){ mTarget.AddItem(value,name);}; - virtual void AddField( const wxString &name="" ){ mTarget.AddField(name);}; + virtual void StartField( const wxString &name="" ){ mTarget.StartField(name);}; + virtual void EndField( ){ mTarget.EndField();}; virtual void Flush(){ mTarget.Flush();}; CommandMessageTarget & mTarget; }; @@ -119,7 +121,8 @@ public: virtual void AddItem(const wxString &value , const wxString &name="" )override; virtual void AddBool(const bool value , const wxString &name="" )override; virtual void AddItem(const double value , const wxString &name="" )override; - virtual void AddField( const wxString &name="" )override; + virtual void StartField( const wxString &name="" )override; + virtual void EndField( ) override; }; class BriefCommandMessageTarget : public CommandMessageTargetDecorator /* not final */ @@ -133,7 +136,8 @@ public: virtual void AddItem(const wxString &value , const wxString &name="" )override; virtual void AddBool(const bool value , const wxString &name="" )override; virtual void AddItem(const double value , const wxString &name="" )override; - virtual void AddField( const wxString &name="" )override; + virtual void StartField( const wxString &name="" )override; + virtual void EndField( ) override; }; /// Used to ignore a command's progress updates diff --git a/src/effects/EffectManager.cpp b/src/effects/EffectManager.cpp index 5eb345c38..4b98ee243 100644 --- a/src/effects/EffectManager.cpp +++ b/src/effects/EffectManager.cpp @@ -244,10 +244,11 @@ void EffectManager::GetCommandDefinition(const PluginID & ID, const CommandConte S.AddItem( GetCommandIdentifier( ID ), "id" ); S.AddItem( GetCommandName( ID ), "name" ); if( bHasParams ){ - S.AddField( "params" ); + S.StartField( "params" ); S.StartArray(); command->DefineParams( S ); S.EndArray(); + S.EndField(); } S.AddItem( GetCommandUrl( ID ), "url" ); S.AddItem( GetCommandTip( ID ), "tip" );